2015-04-23 3 views
3

Я добавил новую библиотеку app-compat 'com.android.support:appcompat-v7:22.1.0' к моему проекту, но, похоже, есть проблема, чтобы применить тему к AppCompatEditText, когда она находится внутри фрагмента.Android - тема 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 до оранжевого вместо серого/чирок ,

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

Благодаря

+1

Вы не используете 'AppCompatEditText' напрямую. Просто используйте 'EditText', а' LayoutInflater', предоставленный 'AppCompatActivity', надувает' AppCompatEditText' вместо этого автоматически. То же самое касается других виджетов. –

+0

Хорошо, когда я меняю его на обычный EditText, цвета применяются, но он больше не похож на материал EditText. Таким образом, у этого нет только этого прямого подчеркивания, но он также имеет эти маленькие края слева и справа. Idk, который хуже :) –

+0

'@ style/TextAppearance.AppCompat.Display1' принадлежит к атрибуту' android: textAppearance' не 'style'. Это могло бы исправить это. –

ответ

2

Это проблема introducced на 22,1

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

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

+0

yep, что сделал трюк, спасибо! может быть недостаток, чтобы получить надув? –

+0

Согласно Google, он будет исправлен в течение недели. Вот ссылка на проблему https://code.google.com/p/android/issues/detail?id=169760 – Sharj

+0

@tobi_b, чтобы знать, что она работает, можете ли вы пометить ответ как принятый? – EkKoZ

0

Вы должны использовать стиль вместо темы для 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> 

чем применять только стиль и не тему.

+0

Если какой-либо пользовательский стиль EditText должен наследовать от 'Widget.AppCompat.EditText'. Не смешивайте внешний вид текста и стили виджета. –

+1

Вы правы, я его редактирую – Informatic0re

+0

спасибо, но этот код не работает ни в фрагменте, ни в действии –

Смежные вопросы