使用带有按钮的左侧绘图的正确方法

时间:2014-12-01 08:01:52

标签: android button drawable

我希望得到这样的东西 enter image description here

 <Button
        android:textColor="@android:color/white"
        android:drawableLeft="@drawable/ic_facebook"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:text="Login with facebook"
        android:background="@color/facebook_theme_primary"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

问题在于,如果图像较大,则图像太大会使按钮变大。 我想让它像上面的照片一样合适..

我的输出是

enter image description here

实现这一目标的最佳方式是什么,并且可以从XML中获得?

完整布局XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:flatui="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".HomeActivity">

<Button
    android:textColor="@android:color/white"
    android:drawableLeft="@drawable/ic_facebook"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:text="Login with facebook"
    android:background="@color/facebook_theme_primary"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

3 个答案:

答案 0 :(得分:0)

最好的方法是在水平LinearLayout

中使用 layout_weight 属性

答案 1 :(得分:0)

我同意LinearLayout并设置OnClickListener另一个解决方案是:

android:layout_width="match_parent"
android:layout_height="20dp"

20dp只是猜测,尝试直到你得到正确的大小

答案 2 :(得分:0)

我发现通过XML没有解决我的问题的方法。

我需要做的是创建普通按钮,没有图像,从java代码添加图像。

     Button button = (Button) findViewById(R.id.button);
    Drawable drawable = getResources().getDrawable(R.drawable.ic_facebook);
    drawable.setBounds(0, 0, (int) (button.getHeight()),
            (int) (button.getHeight()   )); // yes, i know (int)(int) is redundant, you can remove the cast if you are only using integers
    button.setCompoundDrawables(drawable, null, null, null); // this will set the left drawable

就我而言,图像是正方形。如果您希望图像更小,只需将大小乘以0.X ..,

 drawable.setBounds(0, 0, (int) (button.getHeight() * 0.5),
            (int) (button.getHeight() *0.5  ));

如果您的图像不是正方形,我建议将其缩小以适应高度..

drawable.setBounds(0, 0, (int) (button.getHeight()),
            (int) (drawable.getIntrinsicWidth() / drawable.getIntrinsicHeight() * button.getHeight()));

注意 仅在onWindowFocusChanged方法中使用它。为什么?在onCreate方法中,按钮宽度/高度为0。