2016-05-04 15 views
13

Sto cercando di aggiungere un suggerimento nel widget spinner in quanto non vi è alcuna opzione di suggerimento come in EditText, voglio mostrare Gender come suggerimento e quando si fa clic deve mostrare solo Male e la femmina non il suggerimento.Come aggiungere un suggerimento nello spinner in XML

Come può essere fatta soltanto usando XML

codice XML di filatore.

<Spinner 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/spinner1" 
     android:entries="@array/gender" 
     android:layout_marginTop="10dp" 
     android:layout_marginLeft="25dp" 
     android:layout_marginRight="25dp" 
     android:layout_gravity="center_horizontal" /> 

String Array del filatore

<string-array name="gender"> 
    <item>Male</item> 
    <item>Female</item> 
</string-array> 
+1

Possibile duplicato di [Android: suggerimento Spinner] (http://stackoverflow.com/questions/6602339/android-spinner-hint) –

+0

@ A-Jay..chscegli la mia risposta..sicuramente ti aiuto! –

+0

il problema è stato risolto? –

risposta

-3

Provare a utilizzare seguente:

android:prompt="Gender" 
+0

ho provato ma non funziona –

7

Ci sono due modi è possibile utilizzare filatore:

modo statico

android:spinnerMode="dialog" 

e quindi impostare:

android:prompt="@string/hint_resource" 

modo dinamico

spinner.setPrompt("Gender"); 

Nota: funziona come un suggerimento, ma in realtà non lo è.

Che aiuti!

+6

Chiedi conferma non è un suggerimento. – Yazon2006

+0

Troppo ambiguo. Non soddisfa il contesto. – muruthi

+2

android: prompt = "Sesso" non può farlo in XML come errori ma richiederà "@ string/hint_resource" – JPM

-1

provare questo

spinner1.setPrompt("Your choice"); 
+0

Chiedi conferma non è un suggerimento. – Yazon2006

-1

se il Spinner non supporta Android: pronta, dovrebbe usare android.support.v7.widget.AppCompatSpinner invece.

<android.support.v7.widget.AppCompatSpinner 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:prompt="Gender" /> 
+0

Chiedi conferma non è un suggerimento. – Yazon2006

1

Fase 1:

vostro array assomiglia. ultimo elemento il tuo suggerimento

Es: private String [] yourArray = new String [] {"Staff", "Studente", "Il tuo suggerimento"};

Fase 2:

Crea HintAdpater.java (basta copiare & incolla)

Questa classe non restituisce ultimo elemento .. Quindi il tuo non Hint display.

HintAdapter.java

package ajax.com.vvcoe.utils; 

import android.content.Context; 
import android.widget.ArrayAdapter; 

import java.util.List; 


public class HintAdapter extends ArrayAdapter<String> { 


public HintAdapter(Context context, int resource) { 
    super(context, resource); 
} 

public HintAdapter(Context context, int resource, int textViewResourceId) { 
    super(context, resource, textViewResourceId); 
} 

public HintAdapter(Context context, int resource, String[] objects) { 
    super(context, resource, objects); 
} 

public HintAdapter(Context context, int resource, int textViewResourceId, String[] objects) { 
    super(context, resource, textViewResourceId, objects); 
} 

public HintAdapter(Context context, int resource, List<String> objects) { 
    super(context, resource, objects); 
} 

public HintAdapter(Context context, int resource, int textViewResourceId, List<String> objects) { 
    super(context, resource, textViewResourceId, objects); 
} 

@Override 
public int getCount() { 
    // don't display last item. It is used as hint. 
    int count = super.getCount(); 
    return count > 0 ? count - 1 : count; 
} 
} 

Fase 3:

adattatore Set filatore come questo

HintAdapter hintAdapter=new HintAdapter(this,android.R.layout.simple_list_item_1,yourArray); 
    yourSpinner.setAdapter(hintAdapter); 
    // show hint 
    yourSpinner.setSelection(hintAdapter.getCount()); 

merito va a @Yakiv Mospan da questa risposta - https://stackoverflow.com/a/22774285/3879847

modifico qualche ch solo anges ..

+0

Oooh mio. proprio quello di cui avevo bisogno. –

16

Nell'adattatore è possibile impostare il primo elemento come disabilitato. Di seguito è riportato il codice di esempio

@Override 
public boolean isEnabled(int position) { 
    if (position == 0) { 
     // Disable the first item from Spinner 
     // First item will be use for hint 
     return false; 
    } else { 
     return true; 
    } 
} 

E impostare il primo elemento su colore grigio.

@Override 
public View getDropDownView(int position, View convertView, 
            ViewGroup parent) { 
    View view = super.getDropDownView(position, convertView, parent); 
    TextView tv = (TextView) view; 
    if (position == 0) { 
     // Set the hint text color gray 
     tv.setTextColor(Color.GRAY); 
    } else { 
     tv.setTextColor(Color.BLACK); 
    } 
    return view; 
} 

E se l'utente seleziona il primo elemento, non fare nulla.

@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    String selectedItemText = (String) parent.getItemAtPosition(position); 
    // If user change the default selection 
    // First item is disable and it is used for hint 
    if (position > 0) { 
     // Notify the selected item text 
     Toast.makeText(getApplicationContext(), "Selected : " + selectedItemText, Toast.LENGTH_SHORT).show(); 
    } 
} 

Fare riferimento al collegamento seguente per i dettagli.

How to add a hint to Spinner in Android

+0

Funziona perfettamente ... ed è semplice – ariel

0

Il trucco è questa linea

((TextView) view).setTextColor(ContextCompat.getColor(mContext, R.color.login_input_hint_color)); 

utilizzarlo in onItemSelected. Ecco il mio codice con più contesto

List<String> list = getLabels(); // First item will be the placeholder 
     ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(mContext, android.R.layout.simple_spinner_item, list); 
     dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(dataAdapter); 
     spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       // First item will be gray 
       if (position == 0) { 
        ((TextView) view).setTextColor(ContextCompat.getColor(mContext, R.color.login_input_hint_color)); 
       } else { 
        ((TextView) view).setTextColor(ContextCompat.getColor(mContext, R.color.primary_text)); 
       } 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 
      } 
     }); 
2

Questo può essere fatto in un modo molto semplice. Invece di impostare l'adattatore usando i valori predefiniti (android.R.layout.simple_list_item_1), crea il tuo layout xml per TextView e DropDown e usali. Nel layout TextView, definire il testo suggerimento e il colore suggerimento. Ultimo passaggio, crea e svuota l'elemento come primo elemento nell'array dell'articolo definito in stringhe.

<string-array name="professional_qualification_array"> 
    <item></item> 
    <item>B.Pharm</item> 
    <item>M.Pharm</item> 
    <item>PharmD</item> 
</string-array> 

Creare file XML di layout per Spinner TextView (spnr_qualification.xml)

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textSize="20sp" 
    android:hint="Qualification" 
    android:textColorHint="@color/light_gray" 
    android:textColor="@color/blue_black" /> 

Crea layout XML per filatore discesa. (drpdn_qual.xml)

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/text1" 
style="?android:attr/spinnerDropDownItemStyle" 
android:maxLines="1" 
android:layout_width="match_parent" 
android:layout_height="?android:attr/listPreferredItemHeight" 
android:ellipsize="marquee" 
android:textColor="#FFFFFF"/> 

Definire lo spinner nel layout XML principale

<Spinner 
android:id="@+id/spnQualification" 
android:layout_width="match_parent" 
android:layout_height="40dp" 
android:layout_marginTop="10dp" 
android:paddingLeft="10dp" 
android:paddingBottom="5dp" 
android:paddingTop="5dp" 
/> 

E infine nel codice, mentre si imposta l'adattatore per lo spinner, utilizzare il layout XML personalizzato.

ArrayAdapter<CharSequence> qual_adapter = ArrayAdapter.createFromResource(this, R.array.professional_qualification_array,R.layout.spnr_qualification); 

qual_adapter.setDropDownViewResource(R.layout.drpdn_qual); 

spnQualification.setAdapter(qual_adapter) 
0

Ciò che ha funzionato per me è impostare il raccoglitore con un elenco di elementi incluso il suggerimento all'inizio.

final MaterialSpinner spinner = (MaterialSpinner) findViewById(R.id.spinner); 

    spinner.setItems("Select something in this list", getString(R.string.ABC), getString(R.string.ERD), getString(R.string.KGD), getString(R.string.DFK), getString(R.string.TOE)); 

Ora, quando l'utente seleziona in realtà qualcosa nella lista, si dovrebbe utilizzare il metodo spinner.setItems per impostare l'elenco a tutto ciò oltre al tuo suggerimento:

 spinner.setOnItemSelectedListener(new MaterialSpinner.OnItemSelectedListener<String>() { 

      @Override public void onItemSelected(MaterialSpinner view, int position, long id, String item) { 
       spinner.setItems(getString(R.string.ABC), getString(R.string.ERD), getString(R.string.KGD), getString(R.string.DFK), getString(R.string.TOE)); 

} 

Il suggerimento verrà rimosso al più presto come l'utente seleziona qualcosa nella lista.

Problemi correlati