2015-06-29 5 views
7

Próbuję zrobić podkreślenie zmiany koloru linii dla EditText (będzie to używane do sprawdzania danych wejściowych, więc musi być w stanie zmienić w czasie wykonywania).AppCompat i EditText różne podkreślenia dla różnych API

Używam biblioteki AppCompat. Problem polega na tym, że w API 21 i wyżej widzę przezroczystą czarną linię (szarą nakładkę) zamiast wersji pogrubionej.

Jak zrobić to samo, co w API 16?

Użyłem tego kodu, aby zmienić odcień:

final Drawable originalDrawable = view.getBackground(); 
    final Drawable wrappedDrawable = DrawableCompat.wrap(originalDrawable); 
    DrawableCompat.setTint(wrappedDrawable, Color.RED); 
    setBackground(view,wrappedDrawable); 

Pic

+0

ciekawe pytanie, dzięki +1 –

Odpowiedz

6

Rozwiązanie znaleziono dodając te wiersze do mojego tematu:

<item name="editTextStyle">@style/Base.V7.Widget.AppCompat.EditText</item> 
    <item name="editTextBackground">@drawable/abc_edit_text_material</item> 
2

Nie należy zmienić tło. Lepiej jest, jeśli utworzysz motyw i używaj kolorów tematycznych (colorPrimary, colorAccent są najważniejsze dla widżetów), aby uzyskać pożądany efekt. Przypisuj motyw do edytowalnego tekstu i ciesz się. Uwaga: powinieneś użyć jednej z kompozycji AppCompat jako motywu bazowego.

<style name="AppTheme.Base" parent="Theme.AppCompat.NoActionBar"> 
    <item name="colorPrimary">@color/primary</item> 
    <item name="colorAccent">@color/accent</item> 
</style> 

iw swoim colors.xml

<color name="primary">#ff0000</color> 
<color name="accent">#00ff00</color> 
+0

To nie rozwiąże mój problem, ponieważ nie mogę go zmienić w czasie wykonywania ... –

+0

Możesz zmienić motyw w czasie wykonywania. –

+0

Jak mogę to zrobić? –