2016-05-24 18 views
18

Rozwiązania znalazłem zmienić ikonę tarczy rozwijaną gdzie wszystko:Zmień Spinner ikona rozwijana

1. utworzyć niestandardowy odkształcalne

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/vector_drawable_ic_dropdown_black" android:state_focused="true" android:state_pressed="false" /> 
    <item android:drawable="@drawable/vector_drawable_ic_dropdown_black" android:state_focused="true" android:state_pressed="true" /> 
    <item android:drawable="@drawable/vector_drawable_ic_dropdown_black" android:state_focused="false" android:state_pressed="true" /> 
    <item android:drawable="@drawable/vector_drawable_ic_dropdown_black" /> 
</selector> 

2. Ustawić rozciągliwej jako tło do wirowania:

<Spinner 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="16dp" 
    android:background="@drawable/custom_spinner_icon" 
    android:gravity="center" 
    android:paddingBottom="8dp" 
    android:paddingTop="8dp" 
    android:textColor="@color/textcolorprimary" /> 

a wynik jest:

enter image description here

Jak widać nie jest to akceptowalne rozwiązanie, ponieważ ikona musi mieć rację wyrównane i nie wyciągnął.

Co mogę zrobić, aby ikona nie była rozciągnięta i wyrównana?

EDIT

Ponieważ nie istnieją żadne rozwiązania pracy jeszcze chyba muszę podać moje pytanie. To wygląda jak moja Spinner przy użyciu standardowego motywu:

<Spinner 
    android:id="@+id/products_download_spinner_language" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="16dp" 
    android:gravity="center" 
    android:paddingBottom="8dp" 
    android:paddingTop="8dp" 
    android:textColor="@color/textcolorprimary" 
    android:theme="@android:style/Theme.Holo.Light.DarkActionBar" /> 

enter image description here

i wszystko, co chcą (to nie jest naprawdę dużo myślę) zmienia strzałkę. nie chcę, że strzałki w prawym dolnym rogu, aby być wyświetlane, chcę to strzałki mają być wyświetlane pionowo skoncentrowane na prawo:

enter image description here

I każde rozwiązanie, które próbowałem do tej pory:

Spinner Dropdown Arrow

How to set dropdown arrow in spinner?

prostu jeździliśmy pracy. Mieli rozciągnięte ikony lub brakowało dolnej linii lub coś innego poszło całkowicie nie tak. Chcę tylko kolejnej strzały.

+0

http://stackoverflow.com/questions/20422802/how-to-set-dropdown-arrow-in-spinner –

+0

To jest tak śmieszne, że ta Hasn Zostało jeszcze rozwiązane:/ – ZooMagic

Odpowiedz

43

Spróbuj stosując następujące styl do wirówki używając

style="@style/SpinnerTheme" 

// Spinner stylu:

<style name="SpinnerTheme" parent="android:Widget.Spinner"> 
    <item name="android:background">@drawable/bg_spinner</item> 
</style> 

// bg_spinner.xml Wymień arrow_down_gray z strzałką

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item> 

     <layer-list> 

      <item> 
       <shape> 
        <gradient android:angle="90" android:endColor="#ffffff" android:startColor="#ffffff" android:type="linear" /> 

        <stroke android:width="0.33dp" android:color="#0fb1fa" /> 

        <corners android:radius="0dp" /> 

        <padding android:bottom="3dp" android:left="3dp" android:right="3dp" android:top="3dp" /> 
       </shape> 
      </item> 

      <item android:right="5dp"> 

       <bitmap android:gravity="center_vertical|right" android:src="@drawable/arrow_down_gray" /> 

      </item> 

     </layer-list> 

    </item> 

</selector> 
+0

jak usunąć górną prawą i lewą ramkę? wystarczy dolna granica. – Mulgard

+0

Czy wiesz, gdzie jest arrow_down_gray? Szukam pliku! Dzięki – user3175580

+1

Może to być dowolna ikona strzałki, której chcesz użyć. W każdym razie też to załączyłem, proszę zobaczyć tutaj http://oi64.tinypic.com/2jb3b88.jpg – Pehlaj

3

Musisz utworzyć niestandardowe tła takiego:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item> 
     <layer-list> 
      <item> 
       <shape> 
        <gradient android:angle="90" android:endColor="#ffffff" android:startColor="#ffffff" android:type="linear"/> 

        <stroke android:width="1dp" android:color="#504a4b"/> 

        <corners android:radius="5dp"/> 

        <padding android:bottom="3dp" android:left="3dp" android:right="3dp" android:top="3dp"/> 
       </shape> 
      </item> 
      <item> 
       <bitmap android:gravity="bottom|right" android:src="@drawable/drop_down"/> // you can place your dropdown image 
      </item> 
     </layer-list> 
    </item> 

</selector> 

Następnie utwórz styl dla turbinki tak:

potem zastosować ten styl do turbinki

+1

To rozwiązanie nie działa. Brak ikony, dopóki nie klikniesz na pokrętło. a następnie w menu rozwijanym pojawia się ogromna ikona rozwijania. – Mulgard

7

Do tego można użyć .9 Patch Image i po prostu ustaw go w tle.

android:background="@drawable/spin" 

Tutaj podam obraz .9patch. spróbuj z tym.

enter image description here enter image description here

prawym przyciskiem myszy na obrazek i kliknij Zapisz obraz jako

nazwa zestawu obrazów takich jak to: anyname.9.png mocno oszczędzać.

Ciesz .. Happy Coading. :)

+0

Im przy użyciu svg. Znacznie lepszy niż .9 Patch Image. – Mulgard

+0

Myślę, że w tym przypadku obraz .9patch jest lepszy niż svg. Korzystając z 9-częściowej strony, można rozciągnąć tylko przezroczysty piksel z lewej krawędzi i zachować resztę obrazu w oryginalnym rozmiarze. Nie wiem, czy to możliwe przy użyciu svg, ale zdecydowanie spróbuję odpowiedzieć na to pytanie. –

+0

w prawo, a dzięki @Jofre Mateu –

2

Czy próbowałeś zdefiniować niestandardowe tło w formacie xml? zmniejszenie szerokości tło Spinner, który robi to strzałka wygląda tak.

Zdefiniuj Layer-listę tle prostokąta i niestandardowego ikonę strzałki:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape android:shape="rectangle"> 
      <solid android:color="@color/color_white" /> 
      <corners android:radius="2.5dp" /> 
     </shape> 
    </item> 
    <item android:right="64dp"> 
     <bitmap android:gravity="right|center_vertical" 
      android:src="@drawable/custom_spinner_icon" 
     </bitmap> 
    </item> 
</layer-list> 
1

bez użycia rozwijanej Korzystanie ikona rozwijane

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

<item> 
    <layer-list> 
     <item> 
      <shape> 
       <gradient android:angle="90" android:endColor="#ffffff" android:startColor="#ffffff" android:type="linear" /><!--For gradient background--> 

       <stroke android:width="1dp" android:color="#FFF" /><!--For Border background--> 

       <corners android:radius="0dp" /><!--For background corner--> 

       <padding android:bottom="3dp" android:left="3dp" android:right="6dp" android:top="3dp" /><!--For padding for all sides--> 
      </shape> 
     </item> 
     <item> 
      <bitmap android:gravity="center|right" android:src="@drawable/ic_down_arrow" /> // Replace with your Icon 

     </item> 
    </layer-list> 
</item> 

0

dummy.xml (pamiętaj, że rozmiar zdjęcia powinien być mniejszy)

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item> 
      <layer-list android:opacity="transparent"> 
       <item android:width="60dp" android:gravity="left" android:start="20dp"> 
        <bitmap android:src="@drawable/down_button_dummy_dummy" android:gravity="left"/> 
       </item> 
      </layer-list> 
     </item> 
    </selector> 

układ plik urywek być jak

<android.support.v7.widget.CardView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:cardUseCompatPadding="true" 
     app:cardElevation="5dp" 
     > 
    <Spinner 
     android:layout_width="match_parent" 
     android:layout_height="100dp" 
     android:background="@drawable/dummy"> 

    </Spinner> 
    </android.support.v7.widget.CardView> 

click to see result layout image