我需要将drawable添加到我的按钮并添加drawableLeft。如果按钮的宽度设置为wrap_content,那么一切都很好并且看起来很好。但是如果我将自定义宽度设置为我的按钮,则drawableLeft图像会从按钮的标题转到按钮的左边缘。这是android中的一个设计错误吗?如何修复此问题以使按钮在自定义宽度上看起来相同?
此致 evilone
答案 0 :(得分:3)
似乎drawableLeft
的x位置取决于左边填充和x滚动位置:source。这就是设计行为。我认为您最好使用SpannableString
和ImageSpan
类来显示按钮文字左侧的图像:
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" />`