すべてのEditTextに一貫したスタイルを設定します(例)


84

EditTextアプリケーションのすべてのを一貫した外観にしようとしています。私は次のようなことができることを知っています:

<style name="App_EditTextStyle">
    <item name="android:background">@drawable/filled_roundededges_box_dark</item>
    <item name="android:textColor">#808080</item>
    <item name="android:layout_height">45dip</item>
</style>

次に、これを行うことで、特定のEditTextスタイルをこのスタイルにすることができます。

<EditText ...
    style="@style/App_EditTextStyle
    ...>

しかし、このようにEditText、エラーが発生しにくいとは言えないまでも、アプリケーション内のすべてのスタイルを個別に設定することを忘れないでください。

これをテーマの一部にする方法はありますか?これは、このスタイルをすべてに関連付ける必要がないためEditTextです。この架空のコードブロックのようなもの:

<style name="App_Theme" parent="@android:style/Theme.Holo">
   ... 
   <item name="android:EditTextSyle">@style/App_EditTextStyle</item>
   ...
<style>

そして、私の中AndroidManifest.xmlには次のようなものがあります:

<application
    ....
    android:theme="@style/App_Theme">

そして出来上がり!すべての私EditTextのスタイルは一貫しており、インスタンスごとにスタイルを指定する必要はありません。

回答:


155

カスタムテーマのEditTextstyle(named editTextStyle:))を指す属性をオーバーライドします。

<style name="App_Theme" parent="@android:style/Theme.Holo">
   <item name="android:editTextStyle">@style/App_EditTextStyle</item>
</style>

そしてあなたのカスタムスタイルを拡張するようにしますWidget.EditText

<style name="App_EditTextStyle" parent="@android:style/Widget.EditText">
    <item name="android:background">@drawable/filled_roundededges_box_dark</item>
    <item name="android:textColor">#808080</item>
    <item name="android:layout_height">45dip</item>
</style>

編集:

はるかに新しいAppCompat関連のテーマを使用している場合は、androidプレフィックスなしでeditTextStyle属性を使用します。

<style name="App_Theme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="editTextStyle">@style/App_EditTextStyle</item>
</style>

3
これは非常にもっともらしく論理的に聞こえますが、それでも私にはうまくいかないようです。何かが足りないのでしょうか?
コード詩人

1
@ManishGupta正確にはどのように機能しませんか?上記のスタイルをテストしましたが、機能しますlayout_height/heightが、Androidはおそらくテーマのスタイルの前にこれらの属性をチェックし、それらが欠落していると文句を言うため、そこに入れることはできません。ただし、カスタムの描画可能+異なるテキストの色は上記で機能します。
ユーザー

私はあなたが説明した通りに物事を設定しました。再投稿しても意味がありません。とにかくこれをあげます。どこかで何かが足りない。あなたが処方するのはコールドロジックであり、機能するはずです。冷めた後、これを再検討します。ありがとう。
コード詩人2012年

3
@ toobsco42edittextStyleには適用されませんAutoCompleTextView(それはだがEditText)。style.xmlファイルのスタイルautoCompleteTextViewStyleを指すtheme.xmlの属性を確認してくださいWidget.AutoCompleTextView
ユーザー

3
私にとってもうまくいきません。しかし、私がに変更<item name="android:editTextStyle">した場合<item name="editTextStyle">、それは大丈夫です。ありがとう!
Sam Sch 2018

52

@Luksprogの答えは正しいですが、私にはうまくいきません。いくつかの実験の後、editTextStyleからandroid名前空間を削除するとうまくいくことがわかりました。

<style name="App_Theme" parent="@android:style/Theme.Holo">
   <item name="editTextStyle">@style/App_EditTextStyle</item>
</style>

拡張するカスタムスタイルを作成するWidget.EditTextか、AppCompatテーマを使用する場合Widget.AppCompat.EditText

<style name="App_EditTextStyle" parent="@android:style/Widget.EditText">
    <item name="android:background">@drawable/filled_roundededges_box_dark</item>
    <item name="android:textColor">#808080</item>
    <item name="android:layout_height">45dip</item>
</style>

1
私にも効きます。しかし、なぜそれがこのように動作するのですか?
Eagle_Eye 2016年

3
AppCompat図書館と関係があるかもしれません。あなたの活動は広がりAppCompatActivityますか?ああ、Android開発の謎。
Matt Zukowski 2016年

1
@MattZukowskiは、あなたのコメントに基づいていくつかの調査を行いました-考えられる原因:AppCompat v7:21+以降、スタイルに「android:」プレフィックスを付けずに標準のテーマ属性を使用する必要があります。
iflp 2016年

これをありがとう。
Adam Varhegyi 2017

Widget.AppCompat.EditTextを使用しなくても正常に動作します。しかし、Widget.AppCompat.EditTextにアクセスできません。「シンボル '@ android:style / Widget.AppCompat.EditText'を解決できません」と言います
Neri

18

まず、EditTextのスタイルを定義します。親スタイルがandroid:Widget.EditText

<style name="CustomEditTextStyle" parent="android:Widget.EditText">

    <item name="android:textColor">#0F0F0F</item>
    <!-- ... More items here if needed ... -->
</style>

その後android:editTextStyle、カスタムテーマの属性を上書きします。サポートライブラリを使用している場合は、属性をオーバーライドする必要があることに注意してくださいeditTextStyle(android名前空間なし)。

<style name="App_Theme" parent="...">
   <item name="android:editTextStyle">@style/CustomEditTextStyle</item>
   <item name="editTextStyle">@style/CustomEditTextStyle</item> <!-- For compatibility with the support library -->
</style>

1

テキストの色など、いくつかの単純なパラメーターを設定する必要がある場合、Android名前空間には、編集テキスト用に別のスタイルを宣言する必要なしにそれを行ういくつかのパラメーターがあります。例えば

<style name="MyStyle" parent="android:Theme.Material.NoActionBar">
    <item name="colorPrimary">@color/black</item>
    <item name="colorPrimaryDark">@color/white</item>
    <item name="colorAccent">@color/white</item>
    <item name="android:textColor">@color/black</item>
    <item name="android:editTextColor">@color/black</item>
    <item name="android:editTextBackground">@color/black</item>
    ....
</style>

AppCompatの新しいバージョンの場合はeditTextColor、を使用して削除しandroid:ます。
アーミン

-2
<style name="App_Theme" parent="@android:style/Theme.Holo">    
    <item name="android:editTextBackground">@drawable/filled_roundededges_box_dark</item>
</style>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.