android - programacion - Cómo agregar una sugerencia en spinner en XML
manual de programacion android pdf (9)
El truco es esta linea
((TextView) view).setTextColor(ContextCompat.getColor(mContext, R.color.login_input_hint_color));
Úsalo en el elemento seleccionado. Aquí está mi código con más contexto.
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) {
}
});
Estoy tratando de agregar una sugerencia en el widget de giro, ya que no hay opción de Sugerencia como en EditText
, quiero mostrar el Género como una sugerencia y, al hacer clic, debe mostrar solo la sugerencia Masculina y Femenina.
Cómo se puede hacer solo usando XML
Código 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" />
Matriz de cuerdas del hilandero
<string-array name="gender">
<item>Male</item>
<item>Female</item>
</string-array>
En el adaptador puede configurar el primer elemento como deshabilitado. A continuación se muestra el código de ejemplo
@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;
}
}
Y establece el primer elemento en color gris.
@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;
}
Y si el usuario selecciona el primer elemento, no haga nada.
@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();
}
}
Consulte el siguiente enlace para más detalles.
Esto se puede hacer de una manera muy simple. En lugar de configurar el adaptador utilizando los valores incorporados (android.R.layout.simple_list_item_1), cree su propio diseño XML para TextView y DropDown, y utilícelos. En el diseño de TextView, defina Texto de sugerencia y Color de sugerencia. Último paso, cree y vacíe el elemento como el primer elemento en la matriz de elementos definida en Cadenas .
<string-array name="professional_qualification_array">
<item></item>
<item>B.Pharm</item>
<item>M.Pharm</item>
<item>PharmD</item>
</string-array>
Crear diseño XML para 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" />
Crear un diseño XML para el menú desplegable 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"/>
Definir spinner en el diseño principal de 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"
/>
Y, finalmente, en el código, mientras configura el adaptador para el girador, use su diseño XML personalizado.
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)
Hay dos formas en que puedes usar el hilandero:
forma estática
android:spinnerMode="dialog"
y luego establecer:
android:prompt="@string/hint_resource"
forma dinámica
spinner.setPrompt("Gender");
Nota: Funcionará como una sugerencia, pero en realidad no lo es.
¡Que te ayude!
Lo que funcionó para mí es que configurarías tu spinner con una lista de elementos que incluyen la sugerencia al principio.
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));
Ahora, cuando el usuario realmente selecciona algo en la lista, usaría el método spinner.setItems para configurar la lista a todo, además de su sugerencia:
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));
}
La sugerencia se eliminará tan pronto como el usuario seleccione algo en la lista.
Trate de usar la siguiente propiedad:
android:prompt="Gender"
haga su sugerencia en la posición final en su cadena de cadenas como esta Ciudad es la sugerencia aquí
array_city = new String[]{"Irbed", "Amman", "City"};
y luego en su adaptador de matriz
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;
}
};
por lo que el adaptador devuelve solo los dos primeros elementos y finalmente el método onCreate () o lo que, hace que Spinner seleccione la sugerencia
yourSpinner.setSelection(2);
si su Spinner no es compatible con android: prompt, debe usar android.support.v7.widget.AppCompatSpinner en su lugar.
<android.support.v7.widget.AppCompatSpinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:prompt="Gender" />
Paso 1:
Su matriz se parece a último artículo tu sugerencia
Ej .: private String [] yourArray = new String [] {"Staff", "Student", "Your Hint"};
Paso 2:
Crear HintAdpater.java (solo copiar y pegar)
Esta clase no devuelve el último elemento. Por lo tanto, su Sugerencia no aparece.
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;
}
}
Paso 3:
Ajustar el adaptador giratorio como este
HintAdapter hintAdapter=new HintAdapter(this,android.R.layout.simple_list_item_1,yourArray);
yourSpinner.setAdapter(hintAdapter);
// show hint
yourSpinner.setSelection(hintAdapter.getCount());
El crédito va a @Yakiv Mospan por esta respuesta: https://.com/a/22774285/3879847
Solo modifico algunos cambios ..