2017-02-09 10 views
3

TextInputLayout'shinterrorに1つのテーマでカスタムスタイルを適用して、それをstyles.xmlで定義し、何らかの形でアプリケーション全体で使用する必要がありません。|アンドロイドアプリカテゴリ検索styles.xmlを使用してTextInputLayoutのテーマを変更する

のstyles.xml

:私たちはこのような Buttonウィジェットを行うことができます

<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> 

何かのように:このようにそれをインラインを追加します

<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をサブクラス化を検討していますので、このことを念頭においてください。

感謝:)

答えて

6

残念ながら、TextInputLayoutウィジェットは、それがデフォルトのスタイルだのグローバルテーマの属性を定義しない、デザインサポートライブラリ内のすべてのウィジェットです。そのため、カスタムテーマ属性をサポートするためにサブクラス化してからデフォルトのスタイルを照会し、代わりにサブクラスを使用する以外は、スタイルをグローバルにカスタマイズすることはできません。

Widget.Design.TextInputLayoutスタイルは、テーマに定義されている属性を見つけることができない場合にウィジェットが元に戻すデフォルトのスタイルとしてハードコードされていることに注意してください。 。

デザインサポートライブラリの開発者には、デフォルトのテーマ属性を定義すると、適切に動作するためには現在のテーマに存在する必要があるという誤解があるようです。この問題はTabLayoutについては以前はreportedでしたが、この推論に基づいて閉じられ、その後のクエリと説明ではそれ以上の応答は生成されませんでした。 AOSP問題追跡システム上の別のチケットを自由に開き、必要な説明を記入してください。うまくいけばそれはより良い運賃かもしれない。

-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> 
+0

'android:textColorHint'はテーマ属性ではなくスタイル属性であるため、テーマでは定義できません。代わりに 'android:textAppearance'テーマ属性を使用することを意味しましたか? 'TextInputLayout'は実際には' EditText'の代わりに 'LinearLayout'を拡張するラッパークラスであり、デフォルトのテキストアピアランスを考慮しない独自のヒント描画メカニズムを提供するため、これはどちらも機能しません。 – corsair992

関連する問題