目前我的drawable只是缩放到它的正常大小,我希望它适合我的按钮。这是现在看起来的图片:
这是按钮的xml:
<LinearLayout android:layout_width="wrap_content"
android:id="@+id/linearLayout2" android:layout_height="40dp"
android:layout_weight="0.4" android:gravity="right|center_vertical"
android:paddingRight="5dp">
<Button android:id="@+id/button1" android:background="@drawable/refresh"
android:layout_height="25dp" android:layout_width="150dp"
android:text="@string/buttonSearchAgain" android:drawableRight="@drawable/refresh_48"></Button>
</LinearLayout>
所以我希望它看起来像这样:
有什么方法可以缩小我的画笔吗?
答案 0 :(得分:4)
您可以通过编程方式解决此问题:查看this answer中的scaleButtonDrawables
函数。使用该功能,您可以在活动的onCreate()
中写下:
final Button button = (Button) findViewById(R.id.button1);
ViewTreeObserver vto = button.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
button.getViewTreeObserver().removeOnPreDrawListener(this);
//scale to 90% of button height
DroidUtils.scaleButtonDrawables(button, 0.9);
return true;
}
});
(你不能直接调用它,因为onCreate()中没有按钮高度。)
答案 1 :(得分:3)
由于无法在xml上修改或缩放图像,因此需要在代码中设置复合可绘制边界。
使用您自己的“CustomButton”覆盖Button类。然后覆盖方法“SetCompoundDrawables(left,top,right,bottom):
public override void SetCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom)
{
if (right != null)
{
var bounds = right.Bounds;
right.SetBounds(bounds.Left, bounds.Top, bounds.Right, bounds.Bottom - 70);
}
if (left != null)
{
var bounds = left.Bounds;
left.SetBounds(bounds.Left, bounds.Top, bounds.Right, bounds.Bottom - 70);
}
base.SetCompoundDrawables(left, top, right, bottom);
}
请注意,这是C#Code,因为我使用的是Xamarin。但是java代码应该是相同的(尽管有一些不成熟的案例命名)
答案 2 :(得分:2)
重新创建图像。保持图像大小以像素为单位,但减小箭头的大小,使其余部分透明。无论如何这是我的赌注=)
答案 3 :(得分:1)
我认为我找到了解决问题的方法,但很晚才会有所帮助
Drawable drawable = getResources().getDrawable(R.drawable.s_vit);
drawable.setBounds(0, 0, (int)(drawable.getIntrinsicWidth()*0.5),
(int)(drawable.getIntrinsicHeight()*0.5));
ScaleDrawable sd = new ScaleDrawable(drawable, 0, scaleWidth, scaleHeight);
Button btn = findViewbyId(R.id.yourbtnID);
btn.setCompoundDrawables(sd.getDrawable(), null, null, null);
答案 4 :(得分:0)
尝试
<Button android:id="@+id/button1" android:background="@drawable/refresh"
android:layout_height="25dp" android:layout_width="150dp"
android:text="@string/buttonSearchAgain" android:drawableRight="@drawable/refresh_48"
android:padding="5dp"></Button>
(所以添加android:padding="5dp"
)
答案 5 :(得分:0)
我做到了!这有点乱,我最后根本没有使用按钮视图。 “按钮”本身是一个relativeLayout,所以如果你想使用这个解决方案,你将不得不摆弄一些来,如果你想按钮动画。这是我的XML:
<LinearLayout android:layout_width="wrap_content"
android:id="@+id/linearLayout2" android:layout_height="40dp"
android:layout_weight="0.4" android:gravity="right|center_vertical"
android:paddingRight="5dp">
<RelativeLayout android:layout_height="25dp"
android:layout_width="150dp" android:id="@+id/relativeLayout1"
android:clickable="true">
<ImageView android:id="@+id/imageView1" android:scaleType="fitXY"
android:adjustViewBounds="true" android:layout_width="fill_parent"
android:src="@drawable/saywhat" android:layout_height="fill_parent"></ImageView>
<LinearLayout android:layout_width="fill_parent"
android:id="@+id/linearLayout3" android:weightSum="1"
android:layout_height="fill_parent">
<TextView android:layout_weight="0.6"
android:layout_height="fill_parent" android:text="TextView"
android:layout_width="wrap_content" android:id="@+id/textView1"></TextView>
<LinearLayout android:layout_weight="0.4"
android:layout_height="fill_parent" android:layout_width="wrap_content"
android:id="@+id/linearLayout4">
<ImageView android:id="@+id/imageView2"
android:layout_height="wrap_content" android:scaleType="fitXY"
android:adjustViewBounds="true" android:layout_width="wrap_content"
android:src="@drawable/refresh_48"></ImageView>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
</LinearLayout>
享受:)