Как изменить цвет кнопки программно, используя компонент материала для Android API ниже 23? - PullRequest
0 голосов
/ 16 апреля 2020

Я использую компонент материала. моя обычная кнопка выглядит так:

enter image description here

, и я настроил ее следующим образом

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

    <item name="materialButtonStyle">@style/StandardButtonStyle</item>

</style>


<style name="StandardButtonStyle" parent="Widget.MaterialComponents.Button">
    <item name="backgroundTint">@color/green</item>
    <item name="android:textColor">@color/white</item>
</style>

Теперь мне нужно сделать кнопка выглядит как на рисунке ниже (но без значка) программно для моего приложения до API 21.

enter image description here

до используя значок материала, я могу установить его с помощью drawable, как это

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="10dp">
    <solid android:color="#474241"/> 
    <corners
            android:bottomRightRadius="10dp"
            android:bottomLeftRadius="10dp"
            android:topLeftRadius="10dp"
            android:topRightRadius="10dp"/>
</shape>

, а затем установить его программно, как это

button.background = ContextCompat.getDrawable(mContext,R.drawable.inactive_button)

, но это больше не работает, теперь я запутался .....

Я пытался создать стиль, подобный этому

<style name="InactiveButtonStyle" parent="Widget.MaterialComponents.Button.OutlinedButton">
    <item name="android:fillColor">@color/grey_light_medium</item>
    <item name="android:textColor">@color/grey_dark_super</item>
    <item name="android:textAllCaps">false</item>
</style>

, а затем применить его программно, как этот

button.setTextAppearance(mContext,R.style.InactiveButtonStyle)

, но это не так Работа. setTextAppearance метод, который использует контекст в качестве входного аргумента, фактически устарел, и если я использую setTextAppearance метод без контекста, не подходит для API 21 (минимум API 23). Я не знаю, если это причина того, что это не работает

, так как программно изменить цвет кнопки, используя компонент материала для Android API ниже 23?

...