2015-04-22 11 views
5

Skąd pochodzi zielony kolor? Próbowałem zmienić atrybut accentColor, który działa w innych częściach aplikacji, ale nie tutaj.Jak zmienić kolor uchwytów EditText?

editText Colors Screenshot z aplikacji w Lollipop.

Jak mogę zmienić kolory:

  • z uchwytem tekst kanału alfa? jak je zabarwiać?
  • Wybrany kolor tła?

A może kilka wskazówek na przyszłość ... Jak się dowiedziałeś? Natrafiam na wszystkie te mylące problemy związane z kolorem/stylizacją. Czy istnieje gdzieś lista, która mówi mi, jaki domyślny kolor lub atrybut muszę nadpisać dla określonego komponentu?

Odpowiedz

4

Na zmianę koloru uchwyt można zrobić w określonym here robisz to za pomocą styl jako

<style name="MyCustomTheme" parent="@style/MyNotSoCustomTheme"> 
     <item name="android:textSelectHandle">@drawable/text_select_handle_middle</item> 
     <item name="android:textSelectHandleLeft">@drawable/text_select_handle_left</item> 
     <item name="android:textSelectHandleRight">@drawable/text_select_handle_right</item> 
</style> 

Aby to zrobić programowo sprawdzić samo pytanie kolejna odpowiedź here która odbywa się za pomocą refleksji

try { 
    final Field fEditor = TextView.class.getDeclaredField("mEditor"); 
    fEditor.setAccessible(true); 
    final Object editor = fEditor.get(editText); 

    final Field fSelectHandleLeft = editor.getClass().getDeclaredField("mSelectHandleLeft"); 
    final Field fSelectHandleRight = editor.getClass().getDeclaredField("mSelectHandleRight"); 
    final Field fSelectHandleCenter = editor.getClass().getDeclaredField("mSelectHandleCenter"); 

    fSelectHandleLeft.setAccessible(true); 
    fSelectHandleRight.setAccessible(true); 
    fSelectHandleCenter.setAccessible(true); 

    final Resources res = context.getResources(); 

    fSelectHandleLeft.set(editor, res.getDrawable(R.drawable.text_select_handle_left)); 
    fSelectHandleRight.set(editor, res.getDrawable(R.drawable.text_select_handle_right)); 
    fSelectHandleCenter.set(editor, res.getDrawable(R.drawable.text_select_handle_middle)); 
} catch (final Exception ignored) { 
} 

Aby zmienić wybrany kolor tekstu, możesz ustawić textColorHighlight w xml jako

android:textColorHighlight="#ff0000" 

poprzez styl można zrobić jak

<item name="android:textColorHighlight">@color/m_highlight_blue</item> 
+0

dzięki za pomoc, podobały mi się obie odpowiedzi, ale Twoja była bardziej związana z obsługą tekstów. Sądzę, że nie ma sposobu, by je po prostu zabarwić? tak, może najpierw pobrać rysunki, a następnie odcień ... – Lokkio

3

Dokonaj zmian w styles.xml następująco

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="colorPrimary">@color/primary</item> 
    <item name="colorPrimaryDark">@color/primary_dark</item> 
    <item name="colorControlHighlight">@color/accent_translucent</item> 
    <item name="android:colorControlHighlight">@color/accent_translucent</item> 
    <item name="colorAccent">@color/accent</item> 
    <item name="selectableItemBackground">@drawable/selectable_item_background</item> 
    <item name="android:selectableItemBackground">@drawable/selectable_item_background</item> 

</style> 

<color name="primary">#00BCD4</color> 
<color name="primary_dark">#0097A7</color> 
<color name="accent">#FFEB3B</color> 
<color name="accent_translucent">#80FFEB3B</color> 
<color name="accent_bright">#FFF493</color> 

Albo można dodać atrybut XML do listy EditText

android:textColorHighlight="@color/accent_translucent" 

Mam nadzieję, że rozwiąże problem.

+0

Podoba mi się również twoja odpowiedź, ponieważ ustawia kolory w całej aplikacji. Jeszcze jedna dziwna rzecz, której jeszcze nie wymyśliłem. Jeden z moich editekstów nie przejmuje tematu, a drugi edittext ma ... Czy może wiesz o stanie, w którym edittext nie przejmuje stylu? może zły problem z pompowaniem? – Lokkio

+0

Dzięki @Lokkio. Nie, nie spotkałem się z takimi problemami. Może to być spowodowane problemami z pompowaniem. – ch3tanz