4

Я пытаюсь стилизации материал EditText вид:Невозможно установить colorControlNormal и Android: TextColor в стиле

<style name="AppTheme.EditText" parent="@style/Widget.AppCompat.EditText"> 
    <item name="android:textColor">@color/white</item> 
    <item name="android:textColorHint">#8AFFFFFF</item> 

    <item name="colorControlNormal">@color/white</item> 
    <item name="colorControlActivated">@color/white</item> 
    <item name="colorControlHighlight">@color/white</item> 
</style> 

Тогда я применить стиль на моей теме:

<style name="AppTheme"> 
    <item name="editTextStyle">@style/AppTheme.EditText</item> 
</style> 

и применить тему к деятельности :

<activity 
     android:name=".MyActivity" 
     android:configChanges="keyboardHidden|orientation|screenSize" 
     android:windowSoftInputMode="stateAlwaysHidden" 
     android:theme="@style/AppTheme"> 

Однако это не меняет цвет подчеркивания.

Я знаю, что я могу изменить acentColor, чтобы изменить цвет подчеркивания, но я не хочу этого делать, поскольку мне нужен цвет акцента для других элементов управления.

Могу ли я стиль управления цветом подчеркивания следующим образом?

+0

Является ли вид, который был изменен в любом месте кода Java программным путем? (За исключением xml, который вы указали здесь) – Silmarilos

+0

Ничего не меняет стиль/тему/цвет. – lostintranslation

+0

Наверное, тупой вопрос, но примените ли вы тему к соответствующей деятельности (или ко всему проекту)? Кажется, что ваши изменения стиля не влияют ни на что, даже если это не влияет на TextColor. – LukeWaggoner

ответ

9

Причина это не работает: colorControlNormal является атром из темы в то время как android:textColor является стилем атрибута. Чтобы изменить colorControlNormal, вам необходимо переопределить Тема, чтобы изменить значение android:textColor, вам необходимо переопределить стиль. Нет атрибутов с именем colorControlNormal в @style/Widget.AppCompat.EditText или любых его родителей. Таким образом, вы не отвергая ничего при этом:

<style name="AppTheme.EditText" parent="@style/Widget.AppCompat.EditText"> 
    <item name="colorControlNormal">@color/white</item> 
</style> 

Решение: Чтобы действительно изменить значение colorControlNormal, вы должны изменить его в теме. Чтобы сделать это, не меняя тему своей деятельности, вы можете:

1/Создать ThemeOverlay только с темой атрибуты, которые вы хотите изменить:

<style name="AppTheme.EditText"> 
    <item name="colorControlNormal">@color/white</item> 
</style> 

2/Используйте его только в вашей EditText зрения:

<EditText 
    android:layout_width="match_parent" 
    android:theme="@style/AppTheme.EditText" 
/> 

Что на самом деле происходит здесь, так это то, что атрибуты темы View (если существует) будут использоваться. Тема мероприятия будет использоваться в качестве резервного.

Вы всегда можете изменить colorControlNormal темы деятельности, чтобы повлиять на всю деятельность.

+0

Есть ли способ применить тему EditText ко всем виджетам приложения? Возможно ли установить его в приложении? –

+0

Вы можете установить атрибут editTextStyle в теме. По умолчанию это '@ style/Widget.AppCompat.EditText'' @ style/Widget.AppCompat.EditText ' –

+0

Я имел в виду тему, которую вы можете применить к' EditText '. –

0

Вы можете изменить цвет подчеркивания, выполнив следующие действия:

<style name="AppTheme.EditText" parent="@style/Widget.AppCompat.EditText"> 
    <item name="android:textColor">@color/white</item> 
    <item name="android:textColorHint">#8AFFFFFF</item> 

    <item name="android:backgroundTint">@color/white</item> 
    <item name="backgroundTint">@color/white</item> 
</style> 

Вы должны действительно поставить item с android имен в своем собственном styles-v21.xml файле, чтобы избежать Android Studio предупреждения, но это не 100% необходимо. Я тестировал это в эмуляторе API 19, и он работал нормально, никаких сбоев.

+0

спасибо я.. см. проблему в том, что только изменения цвета подчеркивания, но курсор и указатель курсора по-прежнему являются accentColor.Кажется, что цветControlActivated должен быть изменен. – lostintranslation

+0

Обратите внимание, если я поместил colorControlActivated в AppTheme, а не внутри стиля EditText, он работает Но тогда у меня есть стиль для этого элемента управления (цвет текста и цвет управления) в двух разных стилях. – lostintranslation

+0

Добавьте это: 'android: textCursorDrawable =" @ null "' и он изменит цвет курсора на цвет текста. – LukeWaggoner

0

Это решение работает для меня. sIt просто состоит в том, чтобы переопределить значение для colorControlActivated, colorControlHighlight и colorControlNormal в теме стиля edittext. Другие считают, что если вы хотите изменить цвет курсора, то тогда android:textCursorDrawable используйте эту собственность. Я также добавил этот стиль edittext в style.xml(v21). Затем подумайте использовать эту тему для любой деятельности, которую вы желаете. Ниже приведен пример:

Первое решение

<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> 
     <!--Edittext theme --> 
     <item name="editTextStyle">@style/App_EditTextStyle</item> 
</style> 

<style name="App_EditTextStyle" parent="@style/Widget.AppCompat.EditText"> 
    <item name="android:textColor">@color/white</item> 
    <item name="android:textColorHint">@color/black</item> 

    <item name="colorControlNormal">@color/white</item> 
    <item name="colorControlActivated">@color/white</item> 
    <item name="colorControlHighlight">@color/white</item> 

    <item name="android:backgroundTint" >@color/white</item> 
    <item name="backgroundTint">@color/white</item> 

    <item name="android:textCursorDrawable">@color/white</item> 
</style> 

Другое решение

Вы можете установить это с помощью программно тоже. Вот решение для API < 21 и выше

Drawable drawable = yourEditText.getBackground(); // get current EditText drawable 
    drawable.setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP); // change the drawable color 

    if(Build.VERSION.SDK_INT > 16) { 
     yourEditText.setBackground(drawable); // set the new drawable to EditText 
    }else{ 
     yourEditText.setBackgroundDrawable(drawable); // use setBackgroundDrawable because setBackground required API 16 
    } 
0

Здесь вы идете просто следуйте приведенным ниже инструкциям, и вы сделали.

Шаг 1: Создание Стиль

Установка атрибута android:textCursorDrawable в @null должно привести к использованию android:textColor как цвет курсора.

<style name="editTextTheme" parent="@style/Widget.AppCompat.EditText"> 

     <item name="android:textColorHint">@color/white</item> 

     <item name="colorControlNormal">@color/white</item> 
     <item name="colorControlActivated">@color/white</item> 
     <item name="colorControlHighlight">@color/white</item> 

     <item name="colorAccent">@color/white</item> 
     <item name="android:textCursorDrawable">@null</item> 
     <item name="android:textColorPrimary">@color/white</item> 

    </style> 

Шаг 2: Используйте этот стиль как тема

<style name="MyTheme"> 
     <item name="theme">@style/editTextTheme</item> 
</style> 

Шаг 3: реализовать эту тему в компоненте

<android.support.v7.widget.AppCompatEditText 
     android:id="@+id/editText" 
     style="@style/MyTheme" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:hint="Enter Name" 
     android:inputType="textPersonName" /> 
0

Ваш стиль.XML:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="editTextStyle">@style/MyEditTextStyle</item> 
</style> 

<style name="MyEditTextStyle" parent="@style/Widget.AppCompat.EditText"> 
    <item name="android:textColor">#FF0</item> 
</style> 

<style name="AppTheme.MyEditTextTheme"> 
    <item name="android:textColorHint">#8AFFFFFF</item> 

    <item name="colorControlNormal">#FF0</item> 
    <item name="colorControlActivated">#FF0</item> 
    <item name="colorControlHighlight">#FF0</item> 
</style> 

Затем нанесите MyEditTextTheme в качестве темы для вашего EditText:

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.MyEditTextTheme"/> 

Теперь у вас есть желтый подчеркивание только в этом EditText. Также вы можете изменить colorAccent в MyEditTextTheme, это не изменит значение цвета AppTheme.

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

  • Нет связанных вопросов^_^