2015-06-08 8 views
6

Sto cercando di ottenere un costume Spinner come questa:Spinner Dropdown Arrow

ma sono stato in grado di ottenere questo solo:

enter image description here

Come si può vedere Ho diversi problemi.

  1. Anche se ho aggiunto una freccia personalizzata, vedo ancora l'originale.
  2. La mia freccia personalizzata viene visualizzata ad ogni riga.
  3. Come si regolano le dimensioni e la posizione del layout della freccia personalizzata?
  4. Come posso generare righe sottolineate?

Questo è il mio codice:

onCreateView():

Spinner spinner = (Spinner) rootView.findViewById(R.id.spinner); 
this.arraySpinner = new String[]{ 
    "Seleziona una data", 
    "03 Agosto 2015", 
    "13 Giugno 2015", 
    "27 Novembre 2015", 
    "30 Dicembre 2015", 
}; 
ArrayAdapter<String> adapter = new ArrayAdapter<>(
     getActivity(), 
     R.layout.row_spinner, 
     R.id.weekofday, 
     arraySpinner); 

spinner.setAdapter(adapter); 

res/layout/row_spinner.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:padding="8dp"> 

    <TextView android:id="@+id/weekofday" 
     android:singleLine="true" 
     android:textSize="@dimen/textSize" 
     style="@style/SpinnerDropdown" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

    <ImageView android:id="@+id/icon" 
     android:paddingStart="8dp" 
     android:paddingLeft="8dp" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/spinner_arrow"/> 

</LinearLayout> 

EDIT

ho rimosso il ImageView e ha aggiunto un secondo Spinner creato da Resource:

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
     getActivity(), 
     R.array.date, 
     R.layout.spinner_layout); 
spinnerDate.setAdapter(adapter); 

Spinner spinnerTime = (Spinner) rootView.findViewById(R.id.spinnerTime); 
ArrayAdapter<CharSequence> adapterTime = ArrayAdapter.createFromResource(
     getActivity(), 
     R.array.ore, 
     R.layout.spinner_layout); 
spinnerTime.setAdapter(adapterTime); 

con questo layout:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:padding="8dp" 
    android:singleLine="true" 
    android:layout_height="wrap_content" android:layout_width="match_parent"/> 

ho aggiunto questo al mio style.xml:

<style name="AppTheme" parent="@style/_AppTheme"/> 
<!-- Base application theme. --> 
<style name="_AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="android:dropDownSpinnerStyle">@style/SpinnerTheme </item> 

    <item name="android:windowActionBarOverlay">false</item> 
    <item name="colorPrimary">@color/ColorPrimary</item> 
    <item name="colorPrimaryDark">@color/ColorPrimaryDark</item> 
</style> 

.... 
.... 
.... 

<!--Spinner styles 2--> 
<style name="SpinnerTheme" parent="android:Widget.Spinner"> 
    <item name="android:background">@drawable/apptheme_spinner_background_holo_light</item> 
    <item name="android:dropDownSelector">@drawable/apptheme_list_selector_holo_light</item> 
</style> 

<style name="SpinnerTheme.DropDown"> 
    <item name="android:spinnerMode">dropdown</item> 
</style> 

<!-- Changes the spinner drop down item radio button style --> 
<style name="DropDownItemSpinnerTheme" parent="android:Widget.DropDownItem.Spinner"> 
    <item name="android:checkMark">@drawable/apptheme_btn_radio_holo_light</item> 
</style> 

<style name="ListViewSpinnerTheme" parent="android:Widget.ListView"> 
    <item name="android:listSelector">@drawable/apptheme_list_selector_holo_light</item> 
</style> 

<style name="ListViewSpinnerTheme.White" parent="android:Widget.ListView.White"> 
    <item name="android:listSelector">@drawable/apptheme_list_selector_holo_light</item> 
</style> 

<style name="SpinnerItemTheme" 
    parent="android:TextAppearance.Widget.TextView.SpinnerItem"> 
    <item name="android:textColor">#000000</item> 
</style> 

ma non ci sono risultati! Io continuo a vedere questo:

enter image description here

EDIT 2

ho cambiato il style.xml in:

http://pastie.org/private/es40xgebcajajltksyeow

e questo è ciò che ottengo:

enter image description here

Ora, invece di sostituire l'icona del menù a tendina ho anche una seconda icona, la casella di controllo ologramma (che sta lavorando bene, ottenendo selezionato quando scelgo un articolo), ma ancora, come faccio ad ottenere solo il uno che voglio ??

manifest.xml:

http://pastie.org/private/tu0izusbvvxe91lwmh9vnw

risposta

9

è necessario rimuovere il Imageview nel layout personalizzato row_spinner.xml. Nel caso in cui, non è necessario creare una freccia all'interno del layout personalizzato, perché se lo fai, verrà creato in ogni riga come è successo a te. Per fare lo stesso che ci hai mostrato, devi cambiare lo stile Spinner nel tuo styles.xml.

Ad esempio:

<resources> 

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

    <style name="SpinnerTheme.DropDown"> 
     <item name="android:spinnerMode">dropdown</item> 
    </style> 

    <!-- Changes the spinner drop down item radio button style --> 
    <style name="DropDownItemSpinnerTheme" parent="android:Widget.DropDownItem.Spinner"> 
     <item name="android:checkMark">@drawable/btn_radio_holo_light</item> 
    </style> 

    <style name="ListViewSpinnerTheme" parent="android:Widget.ListView"> 
     <item name="android:listSelector">@drawable/list_selector_holo_light</item> 
    </style> 

    <style name="ListViewSpinnerTheme.White" parent="android:Widget.ListView.White"> 
     <item name="android:listSelector">@drawable/list_selector_holo_light</item> 
    </style> 

    <style name="SpinnerItemTheme" 
      parent="android:TextAppearance.Widget.TextView.SpinnerItem"> 
     <item name="android:textColor">#000000</item> 
    </style> 

</resources> 

Per ulteriori informazioni un'occhiata: http://androidopentutorials.com/android-how-to-get-holo-spinner-theme-in-android-2-x/

EDIT

selector_spinner.xml:

<?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="@android:drawable/arrow_up_float" /> 

      </item> 

     </layer-list> 

    </item> 

</selector> 

styles.xml:

<resources> 

    <!-- Base application theme. --> 
    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> 
     <item name="android:spinnerStyle">@style/SpinnerTheme</item> 
    </style> 

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

</resources> 

Alla fine, il filatore sarà simile come enter image description here

EDIT 2

Il seguente codice è in details_fragment_three.xml

<Spinner 
    android:id="@+id/spinnerDate" 
    android:layout_marginLeft="-8dp" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/spinner_item_drawable"/> 
+1

@CrisBenois, Date un'occhiata: http://stackoverflow.com/questions/25028202/android-add-arrow-image-to-spinner –

+0

Vedere la mia modifica .... –

+0

Fatto. Ma vedo ancora la vecchia freccia. Dopo aver aggiunto questi stili e la mia icona a forma di freccia, come posso applicare "SpinnerTheme"? –

0

È possibile utilizzare la propria immagine a discesa;

 <item> 

      <layer-list> 

       <item> 
        <color android:color="@android:color/white" /> 
       </item> 

       <item> 
        <bitmap android:gravity="center_vertical|right" android:src="@drawable/down_arrow" /> // down_arrow replace your image 
       </item> 

      </layer-list> 

     </item> 

    </selector>