我想在一个主题中将自定义样式应用于TextInputLayout's
hint
和error
并全局应用它,即在styles.xml中定义它并以某种方式将其应用于所有{{1}在整个应用程序中使用,无需像这样添加内联:
TextInputLayouts
我们可以像这样做<android.support.design.widget.TextInputLayout
android:id="@+id/usernameWrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/email_username"
android:textColorHint="@color/grey_text"
app:theme="@style/my_custom_style">
<style name="my_custom_style" parent="Widget.Design.TextInputLayout">
<item name="android:textColorHint">@color/success_accent</item>
<item name="android:textSize">20sp</item>
</style>
小部件:
styles.xml
Button
注意:我目前正在考虑 将<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="buttonStyle">@style/my.Widget.Button</item>
<item name="android:buttonStyle">@style/my.Widget.Button</item>
</style>
<style name="my.Widget.Button" parent="@android:style/Widget.TextView">
<item name="android:gravity">center</item>
<item name="android:textSize">@dimen/some_dimen</item>
<item name="android:textAllCaps">false</item>
</style>
作为最后的手段 进行子类化,因此,请在回答时牢记这一点。
谢谢:)
答案 0 :(得分:10)
不幸的是,TextInputLayout
小部件以及设计支持库中的所有小部件似乎都没有为其默认样式定义全局主题属性。因此,除了通过对其进行子类化以支持自定义主题属性以查询默认样式以及在任何地方使用子类之外,它无法全局定制它的样式。
请注意,如果Widget.Design.TextInputLayout
样式找不到在其主题中定义的属性,那么TabLayout
样式仍然会被硬编码为小部件可以回退的默认样式,所以这样做与默认情况下的现有实现没有什么不同。
设计支持库开发人员似乎存在一种误解,即定义默认主题属性要求它出现在当前主题中才能正常工作。此问题之前为printf("Column1 Column2 Column3\n");
printf("%7d%11s%10d\n", 100, "String1", 9348);
printf("%7d%11s%10d\n", 23, "String2", 214);
reported,但基于此推理已结束,后续查询和说明未产生进一步响应。随意在AOSP问题跟踪器上打开另一张票,并进行必要的澄清;希望它可能会更好。
答案 1 :(得分:0)
我实际上正在使用
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
[...]// other definitions
<item name="editTextStyle">@style/EditTextDefault</item>
</style>
<style name="Widget.Design.TextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
<item name="hintTextAppearance">@style/AppTheme.TextFloatLabelAppearance</item>
<item name="errorTextAppearance">@style/AppTheme.TextErrorAppearance</item>
</style>
<style name="AppTheme.TextFloatLabelAppearance" parent="TextAppearance.Design.Hint">
<item name="android:textColor">@color/colorAccent</item>
</style>
<style name="AppTheme.TextErrorAppearance" parent="TextAppearance.Design.Error">
<item name="android:textColor">#d32f2f</item>
</style>
<style name="EditTextDefault" parent="android:Widget.EditText">
<item name="android:paddingLeft">10dp</item>
</style>
答案 2 :(得分:0)
我在项目中使用的解决方案:
<style name="AppBaseTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="textInputStyle">@style/TextInputLayoutTheme</item>
</style>
<style name="TextInputLayoutTheme" parent="Widget.Design.TextInputLayout">
<item name="colorOnSurface">@android:color/transparent</item>
</style>
答案 3 :(得分:-2)
在这里大声思考,你试过这个吗?这应该会改变整个应用程序的颜色提示,但如果你想要这个,那么这可能对你的情况有所帮助。
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textColorHint">@style/text_hint_appearance</item>
</style>
<style name="text_hint_appearance" parent="@android:style/TextAppearance">
<item name="android:textColorHint">@color/success_accent</item>
</style>