71 votes

Comment ajouter un indice dans un spinner en XML ?

J'essaie d'ajouter un indice dans le widget spinner car il n'y a pas d'option d'indice comme dans l'application EditText Je veux afficher le sexe en tant qu'indication et, lorsque l'on clique dessus, cela ne doit montrer que les hommes et les femmes, et non l'indication.

Comment le faire uniquement en utilisant XML

Le code XML du spinner.

  <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 du spinner

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

65voto

Dotnetpickles Points 617

Dans l'adaptateur, vous pouvez définir le premier élément comme désactivé. Voici l'exemple de code

@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;
    }
}

Et mettez le premier élément en couleur grise.

@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;
}

Et si l'utilisateur sélectionne le premier élément, il ne fait rien.

@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();
    }
}

Consultez le lien ci-dessous pour plus de détails.

Comment ajouter un indice au Spinner sous Android ?

12voto

Saurabh Vardani Points 1529

Il y a deux façons d'utiliser le spinner :

manière statique

android:spinnerMode="dialog"

et ensuite fixé :

android:prompt="@string/hint_resource"

manière dynamique

spinner.setPrompt("Gender");

Note : Cela fonctionnera comme un indice mais ce n'en est pas un en réalité.

Que cela puisse aider !

8voto

Cela peut être fait d'une manière très simple. Au lieu de définir l'adaptateur en utilisant les valeurs intégrées (Android.R.layout.simple_list_item_1), créez votre propre mise en page xml pour les deux TextView et DropDown, et utilisez-les. Dans le layout du TextView, définissez le texte et la couleur de l'indice. Dernière étape, créez un élément vide en tant que premier élément dans le tableau d'éléments défini dans le fichier Cordes .

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

Créer une mise en page XML pour le 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" />

Créez une mise en page XML pour le spinner DropDown.( 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"/>

Définir le spinner dans la mise en page principale XML

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

Et enfin, dans le code, lorsque vous définissez l'adaptateur pour le spinner, utilisez votre disposition XML personnalisée.

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)

8voto

Ranjith Kumar Points 8125

Étape 1 :

Votre tableau ressemble à. dernier élément votre indice

Ex : private String[] yourArray = new String[] {"Staff", "Student", "Your Hint"} ;

Étape 2 :

Créez HintAdpater.java (Copiez et collez simplement).

Cette classe ne retourne pas le dernier élément Donc votre Hint ne s'affiche pas.

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;
}
}

Étape 3 :

Réglez l'adaptateur de spinner comme ceci

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

Le crédit va à @Yakiv Mospan de cette réponse - https://stackoverflow.com/a/22774285/3879847

Je modifie quelques changements seulement..

2voto

David Rearte Points 63

L'astuce est cette ligne

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

l'utiliser dans le onItemSelected. Voici mon code avec plus de contexte

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) {
            }
        });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X