カスタムスタイルを1つのテーマのTextInputLayout's
hint
とerror
に適用し、グローバルに適用します。つまり、styles.xmlで定義し、アプリ全体で使用されるすべての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>
このようなButton
ウィジェットを実行できるようなもの:
styles.xml
<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>
注:私は現在最後の手段としてTextInputLayout
をサブクラス化するを検討しているので、答えるときはこのことを覚えておいてください。
ありがとう:)
残念ながら、TextInputLayout
ウィジェット、およびデザインサポートライブラリ内のすべてのウィジェットは、デフォルトスタイルのグローバルテーマ属性を定義していないようです。したがって、デフォルトのスタイルをクエリするカスタムテーマ属性をサポートするようにサブクラス化し、代わりにどこでもサブクラスを使用する以外に、スタイルをグローバルにカスタマイズすることはできません。
Widget.Design.TextInputLayout
styleは、ウィジェットがテーマで定義された属性を見つけられない場合にウィジェットがフォールバックするデフォルトのスタイルとしてハードコードされているため、これはデフォルトで既存の実装と同じです。
デザインサポートライブラリの開発者には、デフォルトのテーマ属性を定義するには、正しく機能するために現在のテーマに存在する必要があるという誤解があるようです。この問題は、以前はTabLayout
で 報告 でしたが、この理由に基づいてクローズされ、その後のクエリと説明ではそれ以上の応答は生成されませんでした。必要な説明を添えて、AOSP課題追跡システムで別のチケットを開いてください。うまくいけば、うまくいくかもしれません。
私は実際にこれを使用しています
<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>