Стиль кнопок с 28.0.0-rc01 - PullRequest
       13

Стиль кнопок с 28.0.0-rc01

0 голосов
/ 03 сентября 2018

У меня есть следующая кнопка:

 <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:

enter image description here

Но выглядит так с alpha2, alpha3 и rc01:

enter image description here

Почему происходит игнорирование моего стиля в более поздней версии (особенно RC?) Может быть, что-то в корне неверно в моем определении Button?

1 Ответ

0 голосов
/ 04 сентября 2018

Причина в том, что из-за того, что AppTheme является Theme.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>

Обратите внимание, что вы не должны расширять AppTheme при написании стиля (который будет использоваться в атрибуте style="@style/MyStyle) для представления.

Они ввели автоинфляцию MaterialButton с альфа2. Откройте класс android.support.design.theme.MaterialComponentsViewInflater на alpha1 и alpha2, чтобы увидеть разницу.

Если вы НЕ хотите, чтобы это поведение автоматически надувало MaterialButton, измените AppTheme на

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