为啥我不能通过 android:theme 更改hintTextAppearance?
Posted
技术标签:
【中文标题】为啥我不能通过 android:theme 更改hintTextAppearance?【英文标题】: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_
android:layout_
style="@style/Style.InputLayout"
android:hint="Username">
<com.google.android.material.textfield.TextInputEditText
android:layout_
android:layout_
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_
android:layout_
android:theme="@style/Style.InputLayout"
android:hint="Username">
<com.google.android.material.textfield.TextInputEditText
android:layout_
android:layout_
android:theme="@style/Theme.EditText"/>
</com.google.android.material.textfield.TextInputLayout>
它不起作用。这是为什么呢?
【问题讨论】:
【参考方案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_
android:layout_
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_
android:layout_
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>
【讨论】:
以上是关于为啥我不能通过 android:theme 更改hintTextAppearance?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能通过更改“高度”值来调整浏览器上的 Onlyoffice 高度
为啥我不能通过取消选中 CodeIgniter 中的复选框来更改数据库中的数据?