【问题标题】:why can't I change hintTextAppearance via android:theme?为什么我不能通过 android:theme 更改hintTextAppearance?
【发布时间】:2020-06-12 06:04:03
【问题描述】:

大家好,我是 android 主题和样式的新手。根据官方文件

样式是指定单个 View 外观的属性集合。样式可以指定诸如字体颜色、字体大小、背景颜色等属性。主题是一种应用于整个应用、活动或视图层次结构的样式,而不仅仅是单个视图

但我无法通过 android:theme 属性更改某些属性,但我可以通过 style

更改

我这里有这个样式文件:

<style name="Style.InputLayout" parent="Widget.Design.TextInputLayout">
    <item name="errorTextAppearance">@style/ErrorTextAppearance</item>
    <item name="hintTextAppearance">@style/HintTextAppearance</item>
    <item name="errorEnabled">true</item>
</style>
<style name="HintTextAppearance" parent="TextAppearance.Design.Hint">
    <!-- Inactive and Active label color-->
    <item name="android:textColor">?attr/colorShadow</item>
</style>

<style name="ErrorTextAppearance" parent="TextAppearance.Design.Error">
    <!-- Error text color-->
    <item name="android:textColor">?attr/colorError</item>
</style>

我有一个 TextInputLayout:

<com.google.android.material.textfield.TextInputLayout
        android:id="@+id/tfUsername"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/Style.InputLayout"
        android:hint="Username">
        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/Theme.EditText"/>

    </com.google.android.material.textfield.TextInputLayout>

这按我的预期工作。但是当我在 TextInputLayout 中将 style 属性更改为 android:theme 时,如下所示:

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/tfUsername"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/Style.InputLayout"
    android:hint="Username">
    <com.google.android.material.textfield.TextInputEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/Theme.EditText"/>

</com.google.android.material.textfield.TextInputLayout>

它不起作用。这是为什么呢?

【问题讨论】:

    标签: android material-design android-theme android-textinputlayout material-components


    【解决方案1】:

    它不起作用。这是为什么呢?

    <com.google.android.material.textfield.TextInputLayout
        android:theme="@style/Style.InputLayout"
    

    它不起作用,因为它错误。 你可以使用类似的东西:

    <com.google.android.material.textfield.TextInputLayout
            android:theme="@style/Style.MyColor"
            ...>
    

    与:

      <style name="MyColor" parent="">
        <item name="colorPrimary">@color/.....</item>
      </style>
    

    通过这种方式,您可以修改该视图和任何子视图的主题属性,这对于覆盖界面特定部分的主题调色板很有用。

    您可以在official doc找到更多信息。

    【讨论】:

    • 好的,所以主题属性与样式属性不同?
    • @ahmetsarias 是的,它们是不同的
    【解决方案2】:

    这样使用:

    在样式上使用此代码

    <style name="MyColor" parent="">
    <item name="android:colorControlActivated">@color/colorTextGray</item>
        <itemname="android:colorControlHighlight">@color/colorTextGray</item>
        <item name="android:colorControlNormal">@color/colorTextGray</item>
    </style>
    
    
    
                    <com.google.android.material.textfield.TextInputLayout
                        android:id="@+id/layoutTextInput"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:theme="@style/MyColor"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintEnd_toStartOf="@+id/guideline131"
                        app:layout_constraintLeft_toLeftOf="parent"
                        app:layout_constraintRight_toRightOf="parent"
                        app:layout_constraintStart_toStartOf="@+id/guideline121"
                        app:layout_constraintTop_toBottomOf="@+id/ed_phone"
                        app:layout_constraintVertical_bias="0.0"
                        app:passwordToggleDrawable="@drawable/show_password_selector"
                        app:passwordToggleEnabled="true"
                        app:passwordToggleTint="@color/colorWhite">
    
                        <androidx.appcompat.widget.AppCompatEditText
                            android:id="@+id/ed_password_mobile"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="30dp"
                            android:inputType="textPassword"
                            android:textColor="@color/colorWhite"
    
                            app:layout_constraintBottom_toBottomOf="parent"
                            app:layout_constraintEnd_toStartOf="@+id/guideline131"
                            app:layout_constraintLeft_toLeftOf="parent"
                            app:layout_constraintRight_toRightOf="parent"
                            app:layout_constraintStart_toStartOf="@+id/guideline121"
                            app:layout_constraintTop_toBottomOf="@+id/ed_phone"
                            app:layout_constraintVertical_bias="0.0" />
                    </com.google.android.material.textfield.TextInputLayout>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 2017-09-20
      • 2012-10-17
      • 2016-03-10
      • 2017-08-04
      • 1970-01-01
      相关资源
      最近更新 更多