Android - тема AppCompatEditText не применяется внутри фрагмента

Я добавил новую библиотеку app-compat 'com.android.support:appcompat-v7:22.1.0' в свой проект, но, похоже, возникла проблема с применением темы к AppCompatEditText, когда она находится внутри фрагмента,

Это мой EditText:

<android.support.v7.widget.AppCompatEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:textColor="@color/teal_300"
        android:textCursorDrawable="@null"
        android:textColorHint="@color/text_hint"
        style="@style/TextAppearance.AppCompat.Display1"
        android:theme="@style/Theme.MyTheme.EditText"/>

Это тема:

<style name="Theme.MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/teal_500</item>
    <item name="colorPrimaryDark">@color/teal_700</item>
    <item name="colorAccent">@color/orange_500</item>
    <item name="colorControlNormal">@color/grey</item>
    <item name="colorControlActivated">@color/teal_300</item>
    <item name="colorControlHighlight">@color/teal_300</item>
    <item name="colorSwitchThumbNormal">@color/teal_300</item>
</style>

<style name="Theme.MyTheme.EditText" parent="Theme.MyTheme">
    <item name="colorControlNormal">@color/orange_500</item>
    <item name="colorControlActivated">@color/orange_500</item>
</style>

Поэтому я просто хочу изменить цвет подчеркивания EditText на оранжевый вместо серого / бирюзового.

Когда я помещаю этот код прямо в макет действия, он прекрасно работает, поэтому подчеркивание оранжевое. Но если я помещу тот же код в макет фрагмента, подчеркивание будет серым / бирюзовым. Таким образом, тема, кажется, не применяется.

Спасибо

2 ответа

Решение

Эта проблема введена в 22.1

Проблема возникает, когда вы используете экземпляр inflater, переданный Fragment#onCreateView().

Обходной путь пока состоит в том, чтобы вместо этого использовать LayoutInflater из getActivity(). GetLayoutInflater().

Вы должны использовать стиль вместо темы для EditText, например:

<style name="EditText" parent="Widget.AppCompat.EditText">
    <item name="colorControlNormal">@color/orange_500</item>
    <item name="colorControlActivated">@color/orange_500</item>
     <item name="android:textAppearance">@style/TextAppearance.AppCompat.Display1</item>
</style>

Чем применять только стиль, а не тему.

Другие вопросы по тегам