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>
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.
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!
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)
É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..
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) {
}
});
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);
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.
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" />
Essayez d'utiliser la propriété suivante:
android:prompt="Gender"