2016-05-24 3 views
18

Решения я нашел, чтобы изменить значок вертушки выпадающего где все:Изменить Spinner раскрывающегося значок

1. создать пользовательскую вытяжку

<?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. Установите вытяжку в качестве фона вращателя:

<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" /> 

И результат:

enter image description here

Как вы можете видеть, это не приемлемое решение, поскольку значок должен быть выровнен по правому краю и не растянут.

Что я могу сделать, чтобы значок не растягивался и не выравнивал его правильно?

EDIT

Поскольку нет никаких рабочих решений пока я предполагаю, что я должен указать на мой вопрос. Это как моя Spinner выглядит, используя стандартную тему:

<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

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

enter image description here

И каждое решение, которое я пытался до сих пор:

Spinner Dropdown Arrow

How to set dropdown arrow in spinner?

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

+0

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

+0

Это так смешно, что это hasn Еще не разрешено:/ – ZooMagic

ответ

43

Попробуйте применить следующий стиль к вашей блесны с помощью

style="@style/SpinnerTheme" 

// Spinner Стиль:

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

// bg_spinner.xml Заменить arrow_down_gray с стрелкой

<?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

, как удалить верхнюю правую и левую границу? просто нужна нижняя граница. – Mulgard

+0

Знаешь, где находится arrow_down_gray? Я ищу файл! Спасибо – user3175580

+1

Это может быть любой значок стрелки, который вы хотите использовать. В любом случае, я также добавил это, пожалуйста, см. Здесь http://oi64.tinypic.com/2jb3b88.jpg – Pehlaj

3

Вам нужно создать собственный фон, как это:

<?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> 

Затем создайте стиль для блесны, как это:

после этого применить этот стиль к вашему блесны

+1

Это решение не работает. Никакой значок не показывается, пока вы не нажмете счетчик. и после этого в раскрывающемся меню появляется огромный значок выпадающего меню. – Mulgard

7

Для этого вы можете использовать .9 Patch Image и просто установите его в фоновом режиме.

android:background="@drawable/spin" 

Здесь я дам вам изображение .9patch. попробуйте с этим.

enter image description here enter image description here

правой кнопкой мыши на изображение и выберите Сохранить изображение как

имя набора изображений, как это: anyname.9.png и нажмите сохранить.

Enjoy .. Happy Coading. :)

+0

Я использую svg. Гораздо лучше, чем .9 Патч-образ. – Mulgard

+0

Я думаю, что в этом случае изображение в формате .9patch лучше, чем svg. Используя 9patch, вы можете растянуть только прозрачный пиксель с левой границы и сохранить остальную часть изображения в исходном размере. Я не знаю, возможно ли использовать svg, но я определенно попытаюсь ответить на этот ответ. –

+0

Право, спасибо @Jofre Mateu –

2

Вы пытались определить пользовательский фон в xml? уменьшая ширину фона Spinner, который делает вашу стрелку.

Определить слой-лист с прямоугольником фоном и значок стрелки на заказ:

<?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

без использования какого-либо падения вниз с помощью вашего выпадающего ICON

<?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 (помните, что размер изображения должен быть меньше)

<?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> 

файл макета сниппет быть как

<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

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