【发布时间】:2017-04-02 01:57:58
【问题描述】:
我需要向我的按钮添加 drawable 并向其添加 drawableLeft。如果按钮的宽度设置为 wrap_content,那么一切都很好并且看起来不错。但是,如果我为按钮设置自定义宽度,则 drawableLeft 图像会从按钮的标题移到按钮的左边缘。这是android中的某种设计错误吗?如何解决此问题以让按钮在自定义宽度上看起来相同?
问候, 恶人
【问题讨论】:
我需要向我的按钮添加 drawable 并向其添加 drawableLeft。如果按钮的宽度设置为 wrap_content,那么一切都很好并且看起来不错。但是,如果我为按钮设置自定义宽度,则 drawableLeft 图像会从按钮的标题移到按钮的左边缘。这是android中的某种设计错误吗?如何解决此问题以让按钮在自定义宽度上看起来相同?
问候, 恶人
【问题讨论】:
似乎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>
【讨论】:
只需将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" />
【讨论】:
我刚刚遇到这个问题,但我发现你只需要设置 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" />`
【讨论】: