texto tamaño studio personalizar letra diseño como color cambiar android spinner

android - studio - ¿Cómo cambiar el tamaño del texto del giro y el color del texto?



spinner color android (19)

En mi aplicación de Android, estoy usando el control de giro, y he cargado datos de la base de datos SQLite en el control de giro, y está funcionando correctamente. Aquí está el código para eso.

Spinner spinner = (Spinner) this.findViewById(R.id.spinner1); List<String> list = new ArrayList<String>(); ArrayAdapter<String> dataAdapter = new ArrayAdapter<String> (this,android.R.layout.simple_spinner_item, list); cursor.moveToFirst(); list.add("All Lists"); if (cursor.getCount() > 0) { for (int i = 0; i < cursor.getCount(); i++) { keyList[i] = cursor.getString(cursor.getColumnIndex(AndroidOpenDbHelper.KEYWORD)); list.add(keyList[i]); cursor.moveToNext(); } } Database.close(); cursor.close(); dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(dataAdapter);

Ahora quiero cambiar el color del texto y el tamaño del texto de los datos de giro. He usado las siguientes líneas XML en mi etiqueta de giro en mi archivo XML, pero no funciona.

android:textColor="@android:color/white" android:textSize="11dp"

¿Cómo puedo cambiar el color del texto y el tamaño del texto de mi hilandero?


Aquí hay un enlace que puede ayudarte a cambiar el color del Spinner :

haga clic aquí

<Spinner android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/spinner" android:textSize="20sp" android:entries="@array/planets"/>

Debe crear su propio archivo de diseño con una definición personalizada para el elemento spinner spinner_item.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:textColor="#ff0000" />

Si desea personalizar los elementos de la lista desplegable, deberá crear un nuevo archivo de diseño. spinner_dropdown_item.xml :

<?xml version="1.0" encoding="utf-8"?> <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="#aa66cc"/>

Y finalmente otro cambio en la declaración del hilandero:

ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.planets_array, R.layout.spinner_item); adapter.setDropDownViewResource(R.layout.spinner_dropdown_item); spinner.setAdapter(adapter);

Eso es.


En lugar de hacer un diseño personalizado para obtener un tamaño pequeño y si desea usar el DISEÑO de tamaño pequeño interno de Android para el girador, debe usar:

"android.R.layout.simple_gallery_item" en lugar de "android.R.layout.simple_spinner_item".

ArrayAdapter<CharSequence> madaptor = ArrayAdapter .createFromResource(rootView.getContext(), R.array.String_visitor, android.R.layout.simple_gallery_item);

Puede reducir el tamaño del diseño del hilandero. Es solo un truco simple.

Si desea reducir el tamaño de una lista desplegable, use esto:

madaptor.setDropDownViewResource(android.R.layout.simple_gallery_item);


Haga un archivo XML personalizado para su elemento spinner.

spinner_item.xml:

Dé su color y tamaño personalizados al texto en este archivo.

<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20sp" android:gravity="left" android:textColor="#FF0000" android:padding="5dip" />

Ahora usa este archivo para mostrar tus elementos de giro como:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_item,list);

No es necesario establecer el recurso desplegable. Solo se necesitará spinner_item.xml para mostrar sus elementos en la ruleta.


He hecho esto como sigue. He usado los métodos getDropDownView () y getView ().

Utilice getDropDownView() para Spinner abierto.

@Override public View getDropDownView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = vi.inflate(R.layout.context_row_icon, null); } TextView mTitle = (TextView) view.findViewById(R.id.context_label); ImageView flag = (ImageView) view.findViewById(R.id.context_icon); mTitle.setText(values[position].getLabel(activity)); if (!((LabelItem) getItem(position)).isEnabled()) { mTitle.setTextColor(activity.getResources().getColor(R.color.context_item_disabled)); } else { mTitle.setTextColor(activity.getResources().getColor(R.color.context_item)); } return view; }

Y usa getView() para el Spinner cerrado.

@Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = vi.inflate(R.layout.context_row_icon, null); } TextView mTitle = (TextView) view.findViewById(R.id.context_label); ImageView flag = (ImageView) view.findViewById(R.id.context_icon); mTitle.setText(values[position].getLabel(activity)); mTitle.setTextColor(activity.getResources().getColor(R.color.context_item_disabled)); return view; }


La forma más fácil de reutilizar / cambiar los recursos de Android.R.layout es simplemente ir a la definición. En Android Studio, haga Ctrl + B en android.R.layout.simple_spinner_item.xml.

Te llevará al archivo de recursos. Solo copie el archivo de recursos y agregue un nuevo diseño en su carpeta Package.R.layout y cambie el color de texto de la vista de texto como desee y luego llámelo en el adaptador como este:

ArrayAdapter<String> adapter = new ArrayAdapter<String(Context,R.layout.spinner_item, spinnerlist);


Más simple: funciona para mí

TextView spinnerText = (TextView) spinner.getChildAt(0); spinnerText.setTextColor(Color.RED);


Otra variante de la solución de Ashraf sería asegurarse de tener en cuenta los tamaños de pantalla. Tendrá que poner la rueda giratoria en onCreate y configurar el oyente después de configurar el adaptador:

//set your adapter with default or custom spinner cell, then:// serverSpinner.setOnItemSelectedListener(spinnerSelector); serverSpinner.setSelection(defaultServer);

Luego, puede comenzar a cambiar el tamaño del texto de la vista que se muestra antes de hacer clic en la flecha giratoria:

private AdapterView.OnItemSelectedListener spinnerSelector = new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { boolean tabletSize = getResources().getBoolean(R.bool.isTablet); boolean largeTablet = getResources().getBoolean(R.bool.isLargeTablet); if (tabletSize) { ((TextView)parent.getChildAt(0)).setTextSize(16); } else if (largeTablet) { ((TextView)parent.getChildAt(0)).setTextSize(18); } else { ((TextView)parent.getChildAt(0)).setTextSize(12); } } public void onNothingSelected(AdapterView<?> parent) { } };

Todo lo que necesitas hacer es crear carpetas específicas de diseño como esta:

valores-sw360dp

valores-sw600dp

valores-sw800dp

y luego agregue un archivo xml llamado "bool.xml" en cada una de esas carpetas:

<?xml version="1.0" encoding="utf-8"?> <resources> <bool name="isTablet">false</bool> <bool name="isLargeTablet">false</bool> </resources>


Para alguien que solo necesita Style para AppCompat .

Resultado

styles.xml

<resources> ... <style name="Spinner" parent="Widget.AppCompat.Light.DropDownItem.Spinner"> <item name="android:paddingStart">0dp</item> <item name="android:paddingEnd">0dp</item> <item name="android:textColor">@color/material_grey_700</item> <item name="android:textSize">12sp</item> </style> </resources>

your_spinner_layout.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" /> ... <android.support.v7.widget.AppCompatSpinner android:id="@+id/content_spinner" style="@style/Widget.AppCompat.Spinner.Underlined" android:layout_width="140dp" android:layout_height="wrap_content" android:entries="@array/shipping_tracking_carrier_names" android:spinnerMode="dropdown" android:theme="@style/Spinner" /> <EditText android:id="@+id/content_input" android:layout_width="140dp" android:layout_height="wrap_content" android:inputType="text" android:maxLines="1" android:paddingEnd="8dp" android:paddingStart="8dp" android:textColor="@color/material_grey_700" android:textSize="12sp" /> ... </LinearLayout>

Más
Y si desea configurar las android:entries programáticamente con el estilo definido.
Prueba esto.

AppCompatSpinner spinner = findViewById(R.id.content_spinner); CharSequence[] entries = getResources().getTextArray(R.array.shipping_tracking_carrier_names); ArrayAdapter<CharSequence> adapter = new ArrayAdapter<>(spinner.getContext(), android.R.layout.simple_spinner_item, entries); adapter.setDropDownViewResource(android.support.v7.appcompat.R.layout.support_simple_spinner_dropdown_item); spinner.setAdapter(adapter);

Como en el código, usar el mismo Context con el Spinner es lo más importante.

spinner.getContext()


Para aquellos que quieren cambiar el color de DrowDownIcon , puede usarlo así

spinner.getBackground().setColorFilter(Color.parseColor("#ffffff"), PorterDuff.Mode.SRC_ATOP);


Para cambiar el color del texto de la ruleta:

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { ((TextView) parent.getChildAt(0)).setTextColor(Color.WHITE);}


Para evitar el retraso, no solo debe configurar las propiedades de texto en el escucha onItemSelected , sino también en el método onCreate la Actividad (pero es un poco complicado).

Específicamente, debe poner esto en onCreate después de configurar el adaptador:

spinner.setSelection(0, true); View v = spinner.getSelectedView(); ((TextView)v).setTextColor(backgroundColor);

Y luego ponga esto en el elemento onItemSelected :

((TextView) view).setTextColor(backgroundColor);

Aquí hay un ejemplo completo:

@Override protected void onCreate(Bundle savedInstanceState) { Spinner spinner = (Spinner) findViewById(R.id.spinner); //Set the choices on the spinner by setting the adapter. spinner.setAdapter(new SpinnerAdapter(toolbar.getContext(), new String[]{"Overview", "Story", "Specifications", "Poll", "Video"}, accentColor, backgroundColor)); //Set the text color of the Spinner''s selected view (not a drop down list view) spinner.setSelection(0, true); View v = spinner.getSelectedView(); ((TextView)v).setTextColor(backgroundColor); //Set the listener for when each option is clicked. spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { //Change the selected item''s text color ((TextView) view).setTextColor(backgroundColor); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); }

Para más detalles, vea mi pregunta .


Primero tenemos que crear el archivo de recursos xml simple para la vista de textview como se textview a continuación:

<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20sp" android:gravity="left" android:textColor="#FF0000" android:padding="5dip" />

y guárdalo. después de establecer en su lista de adaptadores.


Prueba este método. Está funcionando para mí.

@Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { TextView textView = (TextView) view; ((TextView) adapterView.getChildAt(0)).setTextColor(Color.RED); ((TextView) adapterView.getChildAt(0)).setTextSize(20); Toast.makeText(this, textView.getText()+" Selected", Toast.LENGTH_SHORT).show(); }


Puedes tener este tipo de adaptador para spinner, totalmente personalizado:

ArrayAdapter<String> genderAdapter = new ArrayAdapter<String>(getActivity(), R.layout.spinner_text, genderList) { public View getView(int position, View convertView, ViewGroup parent) { View v = super.getView(position, convertView, parent); ((TextView) v).setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); ((TextView) v).setTextColor(Color.parseColor("#676767")); ((TextView) v).setTypeface(vrFont); return v; } public View getDropDownView(int position, View convertView, ViewGroup parent) { View v = super.getDropDownView(position, convertView, parent); ((TextView) v).setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); ((TextView) v).setTypeface(vrFont); ((TextView) v).setTextColor(Color.parseColor("#676767")); if (position == 0) { ((TextView) v).setTextColor(Color.parseColor("#979797")); } return v; }

mientras que R.layout.spinner_text es:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/text1" style="?android:attr/spinnerItemStyle" android:layout_width="fill_parent" android:layout_height="40dp" android:gravity="center_vertical|left" android:ellipsize="marquee" android:maxLines="1" android:textColor="@color/whiteThree" />


Sencillo y crujiente ...:

private OnItemSelectedListener OnCatSpinnerCL = new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { ((TextView) parent.getChildAt(0)).setTextColor(Color.BLUE); ((TextView) parent.getChildAt(0)).setTextSize(5); } public void onNothingSelected(AdapterView<?> parent) { } };


Si desea que el color del texto cambie solo en el elemento seleccionado, esta puede ser una posible solución. Funcionó para mí y debería funcionar para usted también.

spinner.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { ((TextView) spinner.getSelectedView()).setTextColor(Color.WHITE); } });


Si todos los giradores pueden tener el mismo color de texto para sus elementos de TextView, otro enfoque es usar un estilo personalizado para los elementos desplegables del girador:

En res/values/styles.xml :

<resources> <style name="AppBaseTheme" parent="android:Theme.Light"> </style> <style name="AppTheme" parent="AppBaseTheme"> <item name="android:spinnerDropDownItemStyle">@style/mySpinnerItemStyle</item> </style> <style name="mySpinnerItemStyle" parent="@android:style/Widget.Holo.DropDownItem.Spinner"> <item name="android:textColor">@color/my_spinner_text_color</item> </style> </resources>

Y define tu color personalizado en res / values ​​/ colors.xml:

<color name="my_spinner_text_color">#808080</color>


Si trabajas con android.support.v7.widget.AppCompatSpinner, esta es la solución probada más simple que usa estilos:

<android.support.v7.widget.AppCompatSpinner android:id="@+id/spefcialFx" style="@style/Widget.AppCompat.Spinner.Underlined" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_marginLeft="4dp" android:theme="@style/Spinner" android:entries="@array/special_fx_arrays" android:textSize="@dimen/text_size_normal"></android.support.v7.widget.AppCompatSpinner>

Y el estilo:

<style name="Spinner" parent="Widget.AppCompat.Light.DropDownItem.Spinner"> <item name="android:paddingStart">0dp</item> <item name="android:paddingEnd">0dp</item> <item name="android:textColor">@color/white</item> <item name="android:backgroundTint">@color/red</item> <item name="android:textSize">14sp</item> </style>

El único inconveniente es el android: backgroundTint establece el color tanto para la flecha desplegable como para el fondo desplegable.


<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" style="?android:attr/spinnerItemStyle" android:singleLine="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="#fff" android:ellipsize="marquee" android:textAlignment="inherit"/>

solo usa esto:

ArrayAdapter<String> adapter_category = new ArrayAdapter<String>(this, R.layout.spinner_list_item, categories); adapter_category .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);