Android - 关于主题Style, theme、getColor、ColorStateList

最近完善mvvm工程 gitee.com/heyclock/mvvm 过程中也是涉及到md组件的一些使用,Application的theme采用 Theme.MaterialComponents 之后出现了一些默认的样式,怪怪的...

比如底部导航,比如TextInputLayout样式:

这是因为我们采用了 Theme.MaterialComponents.Light/Theme.MaterialComponents.DayNight 以后,默认的颜色啊,背景啊,图标颜色这些都相对于之前采用了另外的处理方式。比如直接用 colorPrimary 混合导航栏底部图标颜色

出现上面的问题,一个是我们对于属性使用不熟悉,对于重写Widget.MaterialComponents.TabLayout不知道如何完善。对于Widget.Design.TextInputLayout同样也是不熟悉。。

我们列一下配置的几个属性:

    <!--    TabLayout 字体属性-->
    <style name="TabLayoutTheme.text">
        <item name="android:textSize">18sp</item>
    </style>
    <!--    TabLayout样式-->
    <style name="TabLayoutTheme" parent="Widget.MaterialComponents.TabLayout">
        <item name="tabMode">fixed</item>
        <item name="background">@color/colorAccent</item>
        <item name="tabTextAppearance">@style/TabLayoutTheme.text</item>
        <item name="tabTextColor">@color/middle_gray</item>
        <item name="tabRippleColor">@android:color/transparent</item>
        <item name="tabIndicatorFullWidth">false</item>
        <item name="tabIndicatorColor">@color/app_main_activatedcolor</item>
        <item name="tabSelectedTextColor">@color/colorPrimary</item>
        <item name="tabIndicatorHeight">4dp</item>
    </style>
    <!--    TextInputEditText 主题: boxBackgroundColor是配置的到属性里面的 -->
    <style name="EditTextStyle" parent="Widget.Design.TextInputLayout">
        <item name="boxBackgroundMode">none</item>
        <item name="android:textColorHint">@color/middle_gray</item>
        <item name="errorEnabled">true</item>
        <item name="counterEnabled">true</item>
    </style>
    <!--    MaterialButton主题-->
    <style name="AppTheme.Button" parent="Widget.AppCompat.Button.Colored">
        <item name="colorButtonNormal">@color/app_main_activatedcolor</item>
        <item name="android:textColor">@color/white</item>
    </style>

有些属性28才有,适配刘海的,所以新建了一个:


使用:

1。 com.google.android.material.tabs.TabLayout 使用的时候 - 注意是style,不是theme

<com.google.android.material.tabs.TabLayout
            android:id="@+id/ah_bottomTbL"
            style="@style/TabLayoutTheme"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/tablayout_bg_shape"
            app:layout_constraintBottom_toBottomOf="parent">
 </com.google.android.material.tabs.TabLayout>

2. com.google.android.material.textfield.TextInputLayout 的配置 - 注意是theme..

<com.google.android.material.textfield.TextInputLayout
                    android:id="@+id/al_userNameTL"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="20dp"
                    android:theme="@style/EditTextStyle"
                    app:boxBackgroundColor="@color/textinput_bg"
                    app:counterMaxLength="25"
                    app:layout_constraintTop_toBottomOf="@+id/al_commonLogo"
                    app:startIconDrawable="@drawable/user_tip_icon">
<com.google.android.material.textfield.TextInputEditText