使用drawableLeft的按钮视图

时间:2011-05-01 08:33:26

标签: android button drawable

我需要将drawable添加到我的按钮并添加drawableLeft。如果按钮的宽度设置为wrap_content,那么一切都很好并且看起来很好。但是如果我将自定义宽度设置为我的按钮,则drawableLeft图像会从按钮的标题转到按钮的左边缘。这是android中的一个设计错误吗?如何修复此问题以使按钮在自定义宽度上看起来相同?

此致 evilone

3 个答案:

答案 0 :(得分:3)

似乎drawableLeft的x位置取决于左边填充和x滚动位置:source。这就是设计行为。我认为您最好使用SpannableStringImageSpan类来显示按钮文字左侧的图像:

final SpannableStringBuilder builder = new SpannableStringBuilder("\uFFFC");
builder.setSpan(new ImageSpan(getResources.getDrawable(R.drawable.your_drawable)),
    0, builder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.append(getString(R.string.your_string));
textView.setText(builder);

此外,您可以使用Html.fromHtml()方法从HTML构建Spannable。但在这种情况下,您需要实现Html.ImageGetter接口以从资源加载图像。

编辑:有一种方法可以仅使用XML来执行类似按钮的小部件:

<LinearLayout
  android:layout_width="200dip"
  android:layout_height="wrap_content"
  android:gravity="center"
  android:clickable="true"
  android:focusable="true"
  android:background="@android:drawable/btn_default">

  <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:duplicateParentState="true"
    android:src="@drawable/button_icon"/>
  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:duplicateParentState="true"
    android:text="@string/button_text"/>
</LinearLayout>

答案 1 :(得分:1)

只需将android:gravity="center_vertical"设置为您的按钮属性。

    <Button
        android:id="@+id/button_id"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawableLeft="@drawable/ic_btn_icon"
        android:drawablePadding="5dp"
        android:text="Button"
        android:gravity="center_vertical" />

答案 2 :(得分:1)

我现在遇到了这个问题,但我发现你只需要将 android:padding 设置为按钮。这样你就可以将图片从按钮的左侧推开。检查此代码:

`<Button
        android:id="@+id/button1"
        android:layout_width="170dp"
        android:layout_height="50dp"
        android:layout_below="@+id/txt1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="12dp"
        android:background="@drawable/button"
        android:drawableLeft="@drawable/icon"
        android:drawablePadding="20dp"
        android:minHeight="40dp"
        android:onClick="onClick"
        android:padding="40dp"
        android:text="@string/string1"
        android:textSize="16sp" />`