可绘制的内部按钮正在扩大

时间:2014-03-18 13:13:01

标签: android android-layout android-button android-drawable

出于某种原因,我需要使用带有图标和文字的按钮。因此,我无法使用ImageButton,因此我会寻求解决方案来设置正常drawableTop的{​​{1}}。

Button尺寸为方形140dp(请参阅下面的屏幕截图)

我计划使用125x125像素,资产本身清晰明快。

然而,这个125px的资产不知何故被按钮放大了,就像下面的截图一样。

该设备是xhdpi设备。

如您所见,方形按钮内的图标模糊,看起来像是以某种方式放大

enter image description here

这里我粘贴了我的按钮XML

Button

<Button android:id="@+id/button_call_us" android:layout_width="140dp" android:layout_height="140dp" android:layout_margin="@dimen/main_menu_button_margin" android:adjustViewBounds="true" android:background="@drawable/custom_button" android:drawablePadding="-20dp" android:drawableTop="@drawable/button_call_us_icon" android:lines="2" android:paddingTop="0dp" android:scaleType="fitXY" android:text="CALL US" android:textColor="@color/white" android:textSize="6pt" /> 是紫色背景,没有任何图案。

android:background="@drawable/custom_button"是图标。

除了android:drawableTop="@drawable/button_call_us_icon",我还尝试了android:scaleType="fitXY"和其他选项,但仍未获得理想的结果。 我的问题是:

为什么centerInside内的可绘制内容会被放大?有没有办法阻止它?

由于

2 个答案:

答案 0 :(得分:1)

因为它是一个按钮,你想在按钮内部绘制一个可绘制的。您可能的解决方案是使用实际实现可绘制属性的ImageButton。然后,您可以调用android:scaleType="fitCenter"并设置一些填充

<ImageButton
        android:id="@+id/imageButton1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/android_button" />

然而,为了在设计方面获得更多自由,你可以使用一个简单的布局而不是按钮,就像这样,只需按照LinearLayout处理按钮就可以了。添加onclicklistener:

<LinearLayout android:orientations="vertical"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:orientation="vertical"
    android:background="#CCC"
    android:padding="8dp"
    android:gravity="center">
    <ImageView android:src='@drawable/ic_launcher'
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView android:text="Lorem Ipsum"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content" />
</LinearLayout>

enter image description here

答案 1 :(得分:0)

试试此代码

Drawable img = getResources().getDrawable( R.drawable.img );
                img.setBounds( 0, 0, (int)(img.getIntrinsicWidth()), 
                         (int)(img.getIntrinsicHeight()) );
                button.setCompoundDrawables(null, img, null, null);