web-dev-qa-db-ja.com

Androidテーマで編集テキストのスタイルをグローバルに設定できない

私は問題に直面しています。テーマを使用して、アプリの編集テキストを同じように表示しようとしています。
オンラインツール(9パッチイメージ)を使用してスタイルを生成し、このようにテーマに設定しようとしました。

   <!-- Base application theme. -->
    <style name="DefaultAppTheme" parent="Theme.AppCompat">
        <!-- Main theme colors -->
        <!--   your app branding color for the app bar -->
        <item name="colorPrimary">@color/blue</item>
        <!--   darker variant for the status bar and contextual app bars -->
        <item name="colorPrimaryDark">@color/darkblue</item>
        <!--   theme UI controls like checkboxes and text fields -->
        <item name="colorAccent">@color/cornflowerblue</item>
        <item name="windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="Android:editTextStyle">@style/EditTextDefault</item>
    </style>

編集テキストの私のスタイル

<style name="EditTextDefault" parent="Android:Widget.EditText">
        <item name="Android:background">@drawable/edit_text_holo_light</item>
        <item name="Android:textColor">@color/light_blue</item>
        <item name="Android:layout_marginLeft">@dimen/margin_edit_text_default</item>
        <item name="Android:layout_marginRight">@dimen/margin_edit_text_default</item>
        <item name="Android:layout_marginTop">@dimen/margin_edit_text_default</item>
    </style>

ただし、編集テキストごとにスタイルを手動で指定せずに編集テキストを使用する場合、これは機能しません。

これは機能しません

<EditText
    Android:id="@+id/edit_text_login"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_above="@+id/edit_text_password"
    Android:hint="@string/hint_enter_login"
    Android:inputType="textEmailAddress" />

これは動作します

<EditText
    Android:id="@+id/edit_text_login"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_above="@+id/edit_text_password"
    style="@style/EditTextDefault"
    Android:hint="@string/hint_enter_login"
    Android:inputType="textEmailAddress" />

Layout_ * paramsがテーマで使用されている場合は影響しませんが、他の属性は機能するはずです。

この問題を解決してください。

18
exlwzicx

これの代わりに..

<item name="Android:editTextStyle">@style/EditTextDefault</item>

これを使って..

<item name="editTextStyle">@style/EditTextDefault</item>
50
Jongz Puangput

あなたは何をするべきか

これを使って @Android:style/Widget.EditText代わりにparent="Android:Widget.EditText"。それがあなたのお役に立てば幸いです。

こちらをお読みくださいSO Answer 一貫したスタイルをすべてのEditTextに設定

<style name="EditTextDefault" parent="@Android:style/Widget.EditText">
4
IntelliJ Amiya

appcompat> v22を使用している場合は、使用してみてください。

<style name="EditText.Colored" parent="Theme.AppCompat">
    <item name="colorControlNormal">@color/colorNormal</item>
    <item name="colorControlActivated">@color/colorActivated</item>
    <item name="colorControlHighlight">@color/colorControlHighlight</item>
</style>

そして、layout.xmlでAndroid:themeプロパティをedittextに設定します

<EditText
    Android:id="@+id/edit_text_login"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_above="@+id/edit_text_password"
    Android:theme="@style/EditText.Colored"
    Android:hint="@string/hint_enter_login"
    Android:inputType="textEmailAddress" />
4
ingyesid

Widget.EditTextへの参照を修正することに加えて:

<style name="EditTextDefault" parent="@Android:style/Widget.EditText">

「テーマ」を作成し、マニフェストに適用する必要があります。このような:

<application
    ...
    Android:theme="@Android:style/DefaultAppTheme" >
</application>
2
Jim