我试图在一个按钮上有一个图像(作为背景),并动态添加,这取决于在运行时发生的事情,一些文字上方/上方的图像。
如果我使用ImageButton,我甚至没有添加文本的可能性。
如果我使用按钮,我可以添加文本,但只定义一个图像与android:drawableBottom和类似的XML属性定义在这里。
然而,这些属性只在x和y维度上组合文本和图像,这意味着我可以在文本周围绘制图像,但不能在文本下面/下面绘制图像(z轴定义为显示出来)。
有什么建议吗?一种想法是扩展Button或ImageButton并重写draw()方法。但以我目前的知识水平,我真的不知道如何做到这一点(2D渲染)。也许有更有经验的人知道一个解决方案,或者至少有一些开始的建议?
MaterialButton支持设置图标并将其与文本对齐:
<com.google.android.material.button.MaterialButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="My button"
app:icon="@drawable/your_icon"
app:iconGravity="textStart"
/>
iconGravity也可以是start / end,如果你想让图标与按钮对齐,而不是与按钮内的文本对齐。
从1.5.0-beta01版本开始,app:iconGravity也可以是top / textTop(提交)
MaterialButton支持设置图标并将其与文本对齐:
<com.google.android.material.button.MaterialButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="My button"
app:icon="@drawable/your_icon"
app:iconGravity="textStart"
/>
iconGravity也可以是start / end,如果你想让图标与按钮对齐,而不是与按钮内的文本对齐。
从1.5.0-beta01版本开始,app:iconGravity也可以是top / textTop(提交)
<Button android:id="@+id/myButton"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:text="Image Button"
android:drawableTop="@drawable/myimage"
/>
或者你可以通过编程:
Drawable drawable = getResources.getDrawable(R.drawable.myimage);
drawable.setBounds(0, 0, 60, 60);
myButton.setCompoundDrawables(null, drawable, null, null);//to the Top of the Button
对于那些只是想把背景,图标图像和文本放在一个按钮从不同的文件:设置一个按钮背景,drawableTop/Bottom/ right /Left和填充属性。
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/home_btn_test"
android:drawableTop="@drawable/home_icon_test"
android:textColor="#FFFFFF"
android:id="@+id/ButtonTest"
android:paddingTop="32sp"
android:drawablePadding="-15sp"
android:text="this is text"></Button>
对于更复杂的布局,你也可以使用RelativeLayout(或任何其他布局),并使其可点击。
教程:涵盖这两种情况的优秀教程:http://izvornikod.com/Blog/tabid/82/EntryId/8/Creating-Android-button-with-image-and-text-using-relative-layout.aspx