在styles.xml中定义时,自定义按钮的“ android:gavity”不适用

时间:2019-08-27 14:05:32

标签: android android-button android-styles android-gravity

我只是不能在styles.xml中定义的按钮中居中(垂直和水平)文本(当所有属性都在布局中时正常工作)

最初,所有属性都直接在布局中设置,但是我有很多片段,其中所有按钮都是相同的。当在布局中完全声明Button时,我什至不需要指定“ gravity”值,文本将自动居中。

我尝试为某些属性创建样式,但是我丢失了文本居中功能,并且样式和/或布局中的“ android:gravity =” center“”不起作用

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>

retour.png

我希望文本垂直居中。我想念什么?

2 个答案:

答案 0 :(得分:0)

您的情况下,只需删除:

<item name="android:paddingBottom">20dp</item>

最好使用父级样式:

<style name="Widget.AppCompat.Button.one_line" parent="@style/Widget.AppCompat.Button">
 ...
</style>

在这种情况下,默认值为:

<item name="android:gravity">center_vertical|center_horizontal</item>

通常:

  

最初,所有属性都是直接在布局中设置的,但是我有很多片段,其中所有按钮都是相同的

如果您想集中应用中所有按钮的样式,请避免在布局中的任何按钮中指定style属性使用:

  • 在您的应用程序主题中具有材料主题 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>

如果您要自定义样式,请使用parent / Widget.MaterialComponents.Button定义 Widget.AppCompat.Button 样式。

答案 1 :(得分:0)

我犯了一个类似@GiddyNaya的错误,显然添加padding_bottom将文本放在按钮中(我想添加边距,而不是填充...)