【问题标题】:Button styling with 28.0.0-rc01带有 28.0.0-rc01 的按钮样式
【发布时间】:2018-09-03 13:49:31
【问题描述】:

我有以下按钮:

 <Button                                    
     android:id="@+id/addexperience_button"                                    
     style="@style/MyButton"                                    
     android:layout_width="match_parent"                                    
     android:layout_height="wrap_content"                                    
     android:layout_alignLeft="@id/emptystate_image"                                    
     android:layout_alignRight="@id/emptystate_image"                                    
     android:layout_below="@id/emptystate_image"                                    
     android:text="@string/pickdetail_addexperience" />

使用这种样式:

  <style name="MyButton" parent="AppTheme">
        <item name="android:textColor">@color/white</item>
        <item name="android:paddingLeft">@dimen/single_spacing</item>
        <item name="android:paddingRight">@dimen/single_spacing</item>
        <item name="android:background">@drawable/bg_primarybutton</item>
    </style>

bg_primarybutton:

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetBottom="6dp"
    android:insetLeft="4dp"
    android:insetRight="4dp"
    android:insetTop="6dp">
    <ripple android:color="?android:attr/colorControlHighlight">
        <item>
            <shape
                android:shape="rectangle"
                android:tint="@color/colorPrimary">
                <corners android:radius="18dp" />
            </shape>
        </item>
    </ripple>
</inset>

现在这个按钮看起来像28.0.0-alpha1

但是alpha2alpha3rc01 看起来像这样:

为什么它忽略了我在更高版本(尤其是 RC?)上的样式,也许我的 Button 定义存在根本性错误?

【问题讨论】:

  • 28.0.0-rc1 的什么? Appcompat 还是设计支持? AppTheme 的父级是什么?
  • 关于版本,设计和应用兼容

标签: android android-9.0-pie


【解决方案1】:

原因是因为您的AppThemeTheme.MaterialComponents.Light.NoActionBar,您的活动充气器正在充气MaterialButton 而不是Button,您无法更改MaterialButton 的背景与旧的Button 相同(参见文档)。

如果你想拥有和以前一样的风格,把你的MyButton风格换成

<style name="MyButton">
  <item name="android:textColor">@color/white</item>
  <item name="android:paddingLeft">@dimen/single_spacing</item>
  <item name="android:paddingRight">@dimen/single_spacing</item>
  <item name="backgroundTint">@color/colorPrimary</item>
  <item name="cornerRadius">18dp</item>
  <item name="rippleColor">?android:attr/colorControlHighlight</item>
</style>

请注意,在为视图编写样式(将在style="@style/MyStyle 属性中使用)时,不应扩展AppTheme

他们在 alpha2 中引入了 MaterialButton 的自动膨胀。 在 alpha1 和 alpha2 上打开类android.support.design.theme.MaterialComponentsViewInflater 看看区别。

如果您不希望这种自动膨胀 MaterialButton 的行为,请将您的 AppTheme 更改为

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge"> 

【讨论】:

  • 救了我的命,出于某种原因,如果我使用 AppCompatButton,它也可以工作。
  • 还有一件事,您能否对此进行扩展:“请注意,在为 View 编写样式(将在 style="@style/MyStyle 属性中使用)时,您不应该扩展您的 AppTheme 。”这是为什么呢?
猜你喜欢
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 2011-02-14
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
相关资源
最近更新 更多