25

谷歌的新材料按钮真的很棒。
根据文档,我们可以设置一个默认显示在左侧的图标。有谁知道怎么设置在右边?我找不到任何关于此的信息。

4

4 回答 4

23

只需使用app:iconGravity属性或方法setIconGravity()

它需要1.1.0版本的 android 材质组件。

在此处输入图像描述

您也可以使用app:iconGravity="end".

也根据文档

如果向此按钮添加了开始对齐的图标,请使用默认 MaterialButton 样式中指定的“.Icon”样式之一的样式。“.Icon”样式略微调整填充以实现更好的视觉平衡。此样式只能与开始对齐的图标按钮一起使用。如果您的图标是端对齐的,则不能使用“.Icon”样式,而必须手动调整填充,以便镜像视觉调整。

于 2019-08-17T23:51:24.387 回答
23

我今天用谷歌搜索了同样的问题,发现了这个:android:layoutDirection="rtl"。它适用于我的测试项目。

于 2018-12-09T08:02:20.853 回答
7

在1.1.0-alpha06版本中有一个新的end重力值

于 2019-05-21T14:30:33.460 回答
1

解决方案 1

对每个按钮使用此扩展方法 (kotlin):

fun MaterialButton.setRightIcon() { 
    TextViewCompat.setCompoundDrawablesRelative(this, null, null, this.icon, null) 
}

解决方案2(更好的方法)

扩展MaterialButton类以在任何地方使用:

class RtlMaterialButton(context: Context, attrs: AttributeSet) : MaterialButton(context, attrs) {

    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
        updateIcon()
    }
    private fun updateIcon() {
        TextViewCompat.setCompoundDrawablesRelative(this, null, null, icon, null)
    }

}

解决方案 3(在 中工作minSDK>=17

如果你想textStart对图标使用重力,你可以android:layoutDirection="rtl"对每个按钮使用。

在您的标签android:supportsRtl="true"中的应用程序中设置AndroidManifest.xml<Application>

于 2019-04-28T12:40:23.510 回答