如何将 materialButton 图标设置到中心
how to set materialButton icon to the center
我正在使用 supportLibrary = "28.0.0-beta01" 版本。
这是我在 .xml 文件中的代码:
<android.support.design.button.MaterialButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:icon="@drawable/ic_my_orders"
app:iconGravity="textStart"
android:gravity="center"/>
到我位于按钮左侧的可绘制对象的代码图标。我想将按钮设置为中心。
我想达到这个结果
编辑
我不需要任何自定义视图或硬编码的东西。如果这是一个错误 (app:iconGravity),我会等待下一个版本。
编辑
版本28.0.0-rc01修复的bug,换个版本就行了
已更新
尝试使用此代码设置按钮的左内边距以使其居中。
<android.support.design.button.MaterialButton
android:id="@+id/material_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:gravity="center_vertical|start"
android:text="CENTER"
android:textColor="@android:color/white"
app:icon="@drawable/ic_location_on_accent_24dp"
app:layout_constraintBottom_toBottomOf="parent" />
JAVA
final MaterialButton button = root_view.findViewById(R.id.material_button);
button.post(new Runnable() {
@Override
public void run() {
int width = button.getWidth();
button.measure(0,0);
int paddingleft = (width - button.getMeasuredWidth() + 50)/2; //50 drawable width
button.setPadding(paddingleft,0,0,0);
}
});
输出
您可以使用 wrap_content 的宽度,使其与您的文本相匹配。并且 layout_gravity 而不是重力来设置按钮自己的重力(而不是它的孩子)。
<android.support.design.button.MaterialButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:icon="@drawable/ic_my_orders"
app:iconGravity="textStart"
android:layout_gravity="center"/>
您在原始问题中的代码片段是正确的。这已被确定为错误,将在即将发布的版本中修复。
使用 Material 组件 库只需使用 app:iconGravity="textStart"
属性:
<com.google.android.material.button.MaterialButton
style="@style/Widget.MaterialComponents.Button.Icon"
app:icon="@drawable/..."
app:iconGravity="textStart"
../>
如果你想偷工减料使用app:shapeAppearanceOverlay
属性:
<com.google.android.material.button.MaterialButton
style="@style/Widget.MaterialComponents.Button.Icon"
app:icon="@drawable/..."
app:iconGravity="textStart"
app:shapeAppearanceOverlay="@style/Button.Cut"
../>
与:
<style name="Button.Cut" parent="">
<item name="cornerFamily">cut</item>
<item name="cornerSize">4dp</item>
</style>
我正在使用 supportLibrary = "28.0.0-beta01" 版本。
这是我在 .xml 文件中的代码:
<android.support.design.button.MaterialButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:icon="@drawable/ic_my_orders"
app:iconGravity="textStart"
android:gravity="center"/>
到我位于按钮左侧的可绘制对象的代码图标。我想将按钮设置为中心。
我想达到这个结果
编辑
我不需要任何自定义视图或硬编码的东西。如果这是一个错误 (app:iconGravity),我会等待下一个版本。
编辑
版本28.0.0-rc01修复的bug,换个版本就行了
已更新
尝试使用此代码设置按钮的左内边距以使其居中。
<android.support.design.button.MaterialButton
android:id="@+id/material_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:gravity="center_vertical|start"
android:text="CENTER"
android:textColor="@android:color/white"
app:icon="@drawable/ic_location_on_accent_24dp"
app:layout_constraintBottom_toBottomOf="parent" />
JAVA
final MaterialButton button = root_view.findViewById(R.id.material_button);
button.post(new Runnable() {
@Override
public void run() {
int width = button.getWidth();
button.measure(0,0);
int paddingleft = (width - button.getMeasuredWidth() + 50)/2; //50 drawable width
button.setPadding(paddingleft,0,0,0);
}
});
输出
您可以使用 wrap_content 的宽度,使其与您的文本相匹配。并且 layout_gravity 而不是重力来设置按钮自己的重力(而不是它的孩子)。
<android.support.design.button.MaterialButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:icon="@drawable/ic_my_orders"
app:iconGravity="textStart"
android:layout_gravity="center"/>
您在原始问题中的代码片段是正确的。这已被确定为错误,将在即将发布的版本中修复。
使用 Material 组件 库只需使用 app:iconGravity="textStart"
属性:
<com.google.android.material.button.MaterialButton
style="@style/Widget.MaterialComponents.Button.Icon"
app:icon="@drawable/..."
app:iconGravity="textStart"
../>
如果你想偷工减料使用app:shapeAppearanceOverlay
属性:
<com.google.android.material.button.MaterialButton
style="@style/Widget.MaterialComponents.Button.Icon"
app:icon="@drawable/..."
app:iconGravity="textStart"
app:shapeAppearanceOverlay="@style/Button.Cut"
../>
与:
<style name="Button.Cut" parent="">
<item name="cornerFamily">cut</item>
<item name="cornerSize">4dp</item>
</style>