"android:gravity" 自定义按钮在 styles.xml 中定义时不适用
"android:gravity" for custom button is not applying when defined in styles.xml
我无法在 styles.xml 中定义的按钮中(垂直和水平)居中文本(当所有属性都在布局中时工作正常)
最初所有属性都是直接在布局中设置的,但我有很多片段,其中所有按钮都是相同的。当 Button 在布局中完全声明时,我什至不需要指定 "gravity" 值,文本会自动居中。
我尝试为某些属性创建样式,但我丢失了文本居中并且 "android:gravity="center"" 不起作用,在布局 and/or 中的样式
styles.xml
<!-- GENERAL - BUTTON -->
<style name="Widget.AppCompat.Button.one_line">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">50dp</item>
<item name="android:paddingStart">20dp</item>
<item name="android:paddingEnd">20dp</item>
<item name="android:paddingBottom">20dp</item>
<item name="android:fontFamily">@font/roboto_condensed_bold</item>
<item name="android:textStyle">bold</item>
<item name="android:textColor">@color/white</item>
<item name="android:textSize">@dimen/default_text_size</item>
<item name="android:gravity">center_vertical</item>
</style>
myLayout.xml
<android.support.constraint.ConstraintLayout>
...
<Button
android:id="@+id/btn_back"
style="@style/Widget.AppCompat.Button.one_line"
android:background="@drawable/border_green_full"
android:text="@string/retour"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
<android.support.constraint.ConstraintLayout>
我希望文本垂直居中。我错过了什么?
在你的情况下,只需删除:
<item name="android:paddingBottom">20dp</item>
最好使用 parent 样式:
<style name="Widget.AppCompat.Button.one_line" parent="@style/Widget.AppCompat.Button">
...
</style>
本例中的默认值为:
<item name="android:gravity">center_vertical|center_horizontal</item>
总的来说:
Originally all attributes were set directly in the layout, but I have lots of fragments where all buttons are the same
如果您想集中应用中所有按钮的样式,避免指定style
布局中任何按钮的属性只需使用:
- 使用 Material 主题 应用主题中的
materialButtonStyle
属性:
类似于:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
...
<item name="materialButtonStyle">@style/Widget.MaterialComponents.Button</item>
</style>
- 使用 AppCompat 主题 使用
buttonStyle
属性:
类似于:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
...
<item name="buttonStyle">@style/Widget.AppCompat.Button</item>
</style>
如果您想自定义样式,请使用 Widget.MaterialComponents.Button
/Widget.AppCompat.Button
.
定义 parent
样式
我犯了一个像@GiddyNaya 所说的错误,显然添加 padding_bottom 将文本放在按钮中(我想添加边距,而不是填充...)
我无法在 styles.xml 中定义的按钮中(垂直和水平)居中文本(当所有属性都在布局中时工作正常)
最初所有属性都是直接在布局中设置的,但我有很多片段,其中所有按钮都是相同的。当 Button 在布局中完全声明时,我什至不需要指定 "gravity" 值,文本会自动居中。
我尝试为某些属性创建样式,但我丢失了文本居中并且 "android:gravity="center"" 不起作用,在布局 and/or 中的样式
styles.xml
<!-- GENERAL - BUTTON -->
<style name="Widget.AppCompat.Button.one_line">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">50dp</item>
<item name="android:paddingStart">20dp</item>
<item name="android:paddingEnd">20dp</item>
<item name="android:paddingBottom">20dp</item>
<item name="android:fontFamily">@font/roboto_condensed_bold</item>
<item name="android:textStyle">bold</item>
<item name="android:textColor">@color/white</item>
<item name="android:textSize">@dimen/default_text_size</item>
<item name="android:gravity">center_vertical</item>
</style>
myLayout.xml
<android.support.constraint.ConstraintLayout>
...
<Button
android:id="@+id/btn_back"
style="@style/Widget.AppCompat.Button.one_line"
android:background="@drawable/border_green_full"
android:text="@string/retour"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
<android.support.constraint.ConstraintLayout>
我希望文本垂直居中。我错过了什么?
在你的情况下,只需删除:
<item name="android:paddingBottom">20dp</item>
最好使用 parent 样式:
<style name="Widget.AppCompat.Button.one_line" parent="@style/Widget.AppCompat.Button">
...
</style>
本例中的默认值为:
<item name="android:gravity">center_vertical|center_horizontal</item>
总的来说:
Originally all attributes were set directly in the layout, but I have lots of fragments where all buttons are the same
如果您想集中应用中所有按钮的样式,避免指定style
布局中任何按钮的属性只需使用:
- 使用 Material 主题 应用主题中的
materialButtonStyle
属性:
类似于:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
...
<item name="materialButtonStyle">@style/Widget.MaterialComponents.Button</item>
</style>
- 使用 AppCompat 主题 使用
buttonStyle
属性:
类似于:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
...
<item name="buttonStyle">@style/Widget.AppCompat.Button</item>
</style>
如果您想自定义样式,请使用 Widget.MaterialComponents.Button
/Widget.AppCompat.Button
.
parent
样式
我犯了一个像@GiddyNaya 所说的错误,显然添加 padding_bottom 将文本放在按钮中(我想添加边距,而不是填充...)