studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android xml spinner android-spinner

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.

Cómo agregar una pista a Spinner en Android


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 ..