2015-03-22 11 views

Odpowiedz

87

zaktualizować bibliotekę wsparcia i XML używać

proszę dodać ten styl do swojej Spinner

style="@style/Base.Widget.AppCompat.Spinner.Underlined" 
+7

Jak pokolorować podkreślenia? – rohitsakala

+1

Jakikolwiek sposób usunąć strzałkę w dół i czy jest podkreślony? jeśli ustawię jakieś tło, podkreślenie znika. –

+0

Jakieś rozwiązania powyżej? Jeśli użyję tego stylu, moja strzałka zostanie zastąpiona przez domyślną. – AndroidGuy

6

To hacky (a nie idealny) sposób zmienić spinner i podkreślają kolor w AppCompat tematu. Główny punkt, że dostosowałem obrazy biblioteki wsparcia dla Androida i pliki xml, aby zmienić kolor.

1) na wsparcie pakiet biblioteki i skopiować 2 zdjęcia (lub pobrać mój zwyczaj od dołu tej wiadomości)

/your-app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.1.0/res/drawable-hdpi/abc_spinner_mtrl_am_alpha.9.png 

i

/your-app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.1.0/res/drawable-hdpi/abc_textfield_default_mtrl_alpha.9.png 

2) Wykonaj kopię tych obrazów

3) Zmień kolor abc_spinner_mtrl_am_alpha.9.png (uwaga: pozostaw czarne obramowanie w takim stanie, jest na 9 poprawek)

4) Zmiana koloru z drugiej linii dolnej z abc_textfield_default_mtrl_alpha.9.png (widać na załączonym obrazku poniżej) małej

5) Zapisz i przenoszenia plików do projektu kanału alfa

6) Tworzenie bottom_line_color.xml odkształcalne:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:top="-6dp" android:left="-6dp" android:right="-6dp"> 
    <shape> 
     <stroke android:color="@color/brown" android:width="6dp"/> 
    </shape> 
</item> 

7) Tworzenie spinner_bottom_line.xml

<?xml version="1.0" encoding="utf-8"?> 
<inset xmlns:android="http://schemas.android.com/apk/res/android" 
    android:insetLeft="@dimen/abc_control_inset_material" 
    android:insetTop="@dimen/abc_control_inset_material" 
    android:insetBottom="@dimen/abc_control_inset_material" 
    android:insetRight="@dimen/abc_control_inset_material"> 
<selector> 
<item android:state_checked="false" android:state_pressed="false"> 
    <layer-list> 
     <item android:drawable="@drawable/my_custom_abc_textfield_default_mtrl_alpha" /> 
     <item android:drawable="@drawable/my_custom_abc_spinner_mtrl_am_alpha" /> 
    </layer-list> 
</item> 
<item> 
    <layer-list> 
     <item android:drawable="@drawable/my_custom_abc_textfield_default_mtrl_alpha" /> 
     <item android:drawable="@drawable/my_custom_abc_spinner_mtrl_am_alpha" /> 
    </layer-list> 
</item> 
</selector> 
</inset> 

P.S. Nie mogłem osiągnąć takiego samego stylu wizualnego, jak domyślny spinner (zmiany wizualne pokazane poniżej). Jeśli zaczniesz używać tego niestandardowego motywu obrotowego, powinieneś go użyć we wszystkich projektach.

więc dodać do wartości/styles.xml

<style name="My.Spinner.Style" parent="Base.Widget.AppCompat.Spinner.Underlined"> 
    <item name="android:background">@drawable/spinner_bottom_line</item> 
</style> 

i użyć go w aplikacji tak:

 <Spinner 
      android:id="@+id/account_spinner" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      style="@style/My.Spinner.Style" 
      /> 

Ważne: Należy zmienić rozmiar tarczy i kanału alfa miejsce do różnych folderów. Możesz znaleźć rozmiar na tej samej ścieżce, jak pokazano powyżej. Istnieje kilka popularnych rozmiarach:

drawables-mdpi 20x26 

drawables-hdpi 29x38 

drawables-xhdpi 38x50 

drawables-xxhdpi 74x98 

Możesz wziąć moje niestandardowe obrazy stąd:

my_custom_abc_spinner_mtrl_am_alpha:

my_custom_abc_spinner_mtrl_am_alpha

my_custom_abc_textfield_default_mtrl_alpha:

my_custom_abc_textfield_default_mtrl_alpha

Przykładem Spinner jest (xxhdpi), linia to mdpi (ponieważ nie potrzebujemy różnych linii w różnych folderach do rysowania, więc możemy mieć tylko 1).

wizualna różnica (od android oknie podglądu studio xml) pokazany jest tutaj:

enter image description here

Pierwsza linia jest mój zwyczaj underline spinner, drugi jest domyślnym Base.Widget.AppCompat.Spinner.Underlined

+0

moja przyjaciółka, twoja metoda może być poprawna, ale jeśli android sam zapewnia jedną linię, za pomocą której możesz to osiągnąć, dlaczego tak ciężko pracować? –

+2

Nie znalazłem sposobu na zmianę koloru podkreślenia spinnera. Jeśli zmieniłem tło w style.xml pozycja spinner zniknęła. Więc to rozwiązanie pomaga mi zmienić kolor linii dolnej i pozostawić pozycję spinnera – Ragaisis

+0

Ciekawe rozwiązanie. Zauważyłem, że łatwiej jest umieścić widok obrazu (z moją linią) poniżej mojego pokrętła. – Yar

1

w styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
     <item name="android:spinnerStyle">@style/holoSpinner</item> 
</style> 

<style name="holoSpinner" parent="Widget.AppCompat.Spinner.Underlined"> 
     <item name="android:textSize">16sp</item> 
     <item name="android:textColor">@color/colorPrimary</item> 
    </style> 

====================== ==

w układzie

<android.support.design.widget.TextInputLayout 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_marginTop="10dp"> 

         <Spinner 
          android:id="@+id/spinCountry" 
          android:layout_width="match_parent" 
          android:layout_height="wrap_content" 
          android:background="@drawable/edit_text_bottom_border" 
          android:paddingBottom="10dp" /> 
        </android.support.design.widget.TextInputLayout> 

================================= ==============

plik edit_text_bottom_border.xml w rozciągliwej

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item 
      android:bottom="1dp" 
      android:left="-3dp" 
      android:right="-3dp" 
      android:top="-3dp"> 
      <shape android:shape="rectangle"> 
       <stroke 
        android:width="1dp" 
        android:color="#535353" /> 
       <!--android:color="#535353" />--> 
      </shape> 
     </item> 
    </layer-list> 
Powiązane problemy