Comment ajouter un indice dans 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 EditText, je veux montrer le genre comme un indice et quand cliqué il doit montrer seulement mâle et Femelle pas l'indice.

comment le faire en utilisant XML

code XML de 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" />

Tableau de Chaîne de la spinner

<string-array name="gender">
     <item>Male</item>
     <item>Female</item>
</string-array>
26
demandé sur A-JaY 2016-05-04 09:20:01

9 réponses

dans l'adaptateur, vous pouvez définir le premier élément comme désactivé. Ci-dessous 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 à la 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, puis ne rien faire.

@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 à Spinner dans Android

29
répondu Dotnetpickles 2017-12-22 10:32:48

il y a deux façons d'utiliser spinner:

statique

android:spinnerMode="dialog"

et ensuite définir:

android:prompt="@string/hint_resource"

dynamique

spinner.setPrompt("Gender");

Note: cela va fonctionner comme un indice mais pas vraiment il est.

Peut-il aider!

9
répondu Saurabh Vardani 2017-12-19 10:49:13

Cela peut être fait d'une manière très simple. Au lieu de configurer 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 TextView et DropDown, et utilisez-les. Dans la mise en page de TextView, définissez le texte et la couleur des indices. Dernière étape, créer et vider l'élément comme premier élément dans le tableau d'éléments défini dans Chaînes de caractères.

<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 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éer la mise en page XML pour la réduction de spinner.( 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 spinner dans la mise en page 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"
/>

et enfin dans le code, lors du paramétrage de l'adaptateur pour le spinner, utilisez votre mise en page 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)
4
répondu Rajesh Ravindradas 2017-09-10 09:11:59

Étape 1:

Votre tableau ressemble. dernier élément votre indice

Ex : private String[] yourArray = new String[] {"Personnel", "Étudiant","Votre Indice"};

Etape 2:

Créer HintAdpater.java (il suffit de copier-coller)

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 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());
https://stackoverflow.com/a/22774285/3879847

Je ne modifie que quelques modifications..

2
répondu Ranjith Kumar 2017-05-23 12:17:54

Le truc, c'est cette ligne

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

utilisez - le dans l'unemesélectionné. 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) {
            }
        });
1
répondu David Rearte 2017-08-16 03:01:44

faites votre indice à la position finale dans votre tableau de cordes comme ceci Ville est l'astuce ici

array_city = new String[]{"Irbed", "Amman", "City"};

et puis dans votre adaptateur tableau

ArrayAdapter<String> adapter_city = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, array_city) {
            @Override
            public int getCount() {
                // to show hint "Select Gender" and dont able to select
                return 2;
            }
        };

donc l'adaptateur ne renvoie que les deux premiers éléments et enfin dans onCreate () méthode ou quoi ,,, faire Spinner sélectionnez l'indicateur

yourSpinner.setSelection(2);
1
répondu Mahmoud Adel Mahmoud Abu Al Ha 2018-06-27 20:36:37

Ce qui a fonctionné pour moi, c'est vous définissez votre spinner avec une liste d'éléments, y compris l'allusion au début.

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

maintenant, quand l'utilisateur sélectionne quelque chose dans la liste, vous utiliserez le spinner.méthode setItems pour mettre la liste à tout sauf votre indice:

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

}

L'indice sera supprimé dès que l'utilisateur sélectionne quelque chose dans la liste.

0
répondu Simon 2017-12-23 21:30:50

si votre Spinner ne supporte pas android:invite, devrait utiliser android.soutien.v7.widget.AppCompatSpinner à la place.

<android.support.v7.widget.AppCompatSpinner
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:prompt="Gender" />
-2
répondu tik 2016-08-19 22:23:05

Essayez d'utiliser la propriété suivante:

android:prompt="Gender"
-4
répondu Hello World 2016-05-04 06:23:33