Comment puis-je changer la couleur de police de l'élément sélectionné dans un disque?
Je suis en mesure de changer la couleur de fond de l'élément sélectionné, la couleur de l'élément déroulant, etc., mais pas la couleur du texte de l'élément sélectionné ... comment puis-je le faire?
mon code est: c'est spinner que j'utilise--:
<Spinner
Android:id="@+id/spinner1"
Android:layout_width="wrap_content"
Android:layout_height="32dip"
Android:background="@drawable/mybg"
Android:divider="@drawable/list_divider"
Android:drawSelectorOnTop="true"
Android:popupBackground="#D3D5D3"
Android:Prompt="@string/activityy_Prompt"
/>
c'est mybg.xml
<!-- <item Android:drawable="@drawable/blue" Android:state_pressed="false"/> -->
<!-- <item Android:drawable="@drawable/back11"/> -->
<item Android:drawable="@drawable/greenyellow1" Android:state_focused="true" Android:state_pressed="false"/>
<item Android:drawable="@drawable/greenyellow1" Android:state_focused="true" Android:state_pressed="true"/>
<item Android:drawable="@drawable/greenyellow1" Android:state_focused="false" Android:state_pressed="true"/>
<item Android:drawable="@drawable/greenyellow1" Android:state_selected="true"/>
<item Android:drawable="@drawable/back11"/>
en utilisant ceux-ci, je ne suis pas en mesure de changer la couleur du texte de l'élément sélectionné ...
drawable/mybg:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_activated="true">
<color Android:color="@color/black" />
</item>
</layer-list>
Cela modifiera la couleur de l'élément sélectionné dans la fenêtre contextuelle.
Définissez OnItemSelectedListener
comme ceci:
private AdapterView.OnItemSelectedListener listener = new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
((TextView) parent.getChildAt(0)).setTextColor(0x00000000);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
};
puis définissez OnItemSelectedListener
sur spinner
comme ceci:
spinner.setOnItemSelectedListener(listener);
essayez d'implémenter onItemSelected dans votre OnItemSelectedListener pour changer la couleur du texte de l'élément sélectionné dans spinner
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
int index = adapterView.getSelectedItemPosition();
((TextView) spinner.getSelectedView()).setTextColor(getResources().getColor(R.color.Blue)); //<----
en utilisant le sélecteur comme couleur du texte.
créez color_selector.xml dans drawable comme
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_pressed="true"
Android:color="#000000" /> <!-- pressed -->
<item Android:state_focused="true"
Android:color="#000000" /> <!-- focused -->
<item Android:color="#FFFFFF" /> <!-- default -->
</selector>
et dans textview
<TextView
Android:textColor="@drawable/color_selector"/>
Vous pouvez changer la couleur du texte sélectionné en ajoutant OnItemSelectedListener
à la spinner
qtySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
((TextView) view).setTextColor(Color.BLACK); //Change selected text color
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
il suffit d'utiliser cette ligne listner onItemSelected -
public void onItemSelected(AdapterView<?> parent, View arg1, int arg2,long arg3)
{
item = (String) parent.getItemAtPosition(arg2);
((TextView) parent.getChildAt(0)).setTextColor(0x00000000);
}
Je sais que c'est une vieille question, mais j'avais un gros problème pour changer la couleur de l'élément sélectionné dans Spinner dans TabLayout et cela fonctionnait vraiment pour moi:
spinner.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
((TextView) spinner.getSelectedView()).setTextColor(Color.WHITE); //change to your color
}
});
La définition de ((TextView) view).setTextColor(getResources().getColor(R.color.black));
dans onItemSelected(...)
méthode d'écoute fonctionnera . Elle définit la couleur du texte sélectionné sélectionné.
Vous n'avez pas besoin de code Java pour le changement de couleur de fond dans Android 2.3v. Ajoutez simplement Android:background="#F0F8FF"
à votre spinner en fichier xml.
Si votre spinner utilise un ArrayAdapter, vous pouvez simplement passer une disposition personnalisée pour vos éléments spinner. Cette disposition peut être un simple textView mais avec l’attribut Android: textColor.
MainActivity.Java onCreate ()
adapter = new ArrayAdapter<>(this, R.layout.spinner_custom_textcolor, data);
spinner.setAdapter(adapter);
spinner_custom_textcolor.xml
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
style="?android:attr/spinnerItemStyle"
Android:textColor="@color/YOUR_COLOR_HERE"
Android:singleLine="true"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:ellipsize="Marquee"
Android:textAlignment="inherit"/>
* Tout ce qui précède, sauf pour Android: textColor est une copie directe de Android.R.layout.simple_spinner_item
mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
((TextView) adapterView.getChildAt(0)).setTextColor(Color.WHITE);
}
La solution qui a fonctionné pour moi a consisté à utiliser une variable CheckedTextView
pour la vue des ressources déroulantes, puis à modifier la couleur de l'élément vérifié à l'aide d'un sélecteur de couleur.
spinner_dropdown_item.xml
dans le dossier layout
:
<?xml version="1.0" encoding="utf-8"?>
<!-- A `CheckedTextView` allows the color of the text to be changed when it is selected (checked). -->
<CheckedTextView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/spinner_item_textview"
Android:layout_height="wrap_content"
Android:layout_width="match_parent"
Android:maxLines="1"
Android:ellipsize="end"
Android:paddingStart="20dp"
Android:paddingEnd="20dp"
Android:paddingTop="8dp"
Android:paddingBottom="8dp"
Android:textSize="18sp"
Android:textColor="@color/spinner_color_selector"
Android:background="@color/spinner_background" />
spinner_color_selector
dans le dossier color
:
<?xml version="1.0" encoding="utf-8"?>
<!-- Highlight the selected (checked) item when the spinner is open. -->
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item Android:state_checked="true" Android:color="@color/white" />
<item Android:color="@color/blue_100" />
</selector>
spinner_dropdown_item.xml
doit être défini comme la DropDownResourceView
pour la Adapter
. Dans mon cas, j'utilise une variable ResourceArrayAdapter
qui extrait des informations de plusieurs sources.
// Setup a `MatrixCursor` for the static entries.
String[] matrixCursorColumnNames = {DatabaseHelper._ID, DatabaseHelper.NAME};
MatrixCursor matrixCursor = new MatrixCursor(matrixCursorColumnNames);
matrixCursor.addRow(new Object[]{-2, getString(R.string.first_spinner_item)});
matrixCursor.addRow(new Object[]{-1, getString(R.string.second_spinner_item)});
// Get a `Cursor` with the list of additional items from the database.
Cursor cursor = DatabaseHelper.getCursor();
// Combine `matrixCursor` and `cursor`.
MergeCursor mergeCursor = new MergeCursor(new Cursor[]{matrixCursor, foldersCursor});
// Create a `ResourceCursorAdapter` for the spinner with `this` context. `0` specifies no flags.;
ResourceCursorAdapter resourceCursorAdapter = new ResourceCursorAdapter(this, R.layout.spinner_item, mergeCursor, 0) {
@Override
public void bindView(View view, Context context, Cursor cursor) {
// Get a handle for the spinner item `TextView`.
TextView spinnerItemTextView = (TextView) view.findViewById(R.id.spinner_item_textview);
// Set the `TextView` to display the name.
spinnerItemTextView.setText(cursor.getString(cursor.getColumnIndex(DatabaseHelper.NAME)));
}
};
// Set the `ResourceCursorAdapter` drop drown view resource.
resourceCursorAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
// Get a handle for the `Spinner`.
Spinner spinner = (Spinner) findViewById(R.id.spinner);
// Set the adapter for the folder `Spinner`.
spinner.setAdapter(resourceCursorAdapter);
Étant donné que ResourceCursorAdapter
utilise la même bindView
pour renseigner le compteur lorsque celui-ci est ouvert et fermé, l'ID de la TextView
dans spinner_dropdown_item.xml
et spinner_item.xml
doit être identique.
spinner_item.xml
dans le dossier layout
:
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/spinner_item_textview"
Android:layout_height="wrap_content"
Android:layout_width="match_parent"
Android:maxLines="1"
Android:ellipsize="end"
Android:paddingStart="10dp"
Android:paddingEnd="10dp"
Android:textSize="18sp"
Android:textColor="@color/primaryTextColor" />
certains d'entre vous qui utilisent MaterialBetterSpinner et relient vos mises en page, tout ce qui précède ne va pas aider, essayez ceci, espérons que cela vous aide:
public class MyAdapter extends ArrayAdapter<String> {
public MyAdapter(Context context, int textViewResourceId, List<String> objects) {
super(context, textViewResourceId, objects);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
return getCustomView(position, convertView, parent);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return getCustomView(position, convertView, parent);
}
public View getCustomView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final YourXMLBinding rowBinding = DataBindingUtil.inflate(inflater, R.layout.yourXML, parent,false);
rowBinding.tv1.setText(mMy.getValues().get(position));
if(position == mMy.getCurrentIndex()) {
rowBinding.tv1.setTypeface(Typer.set(getContext()).getFont(Font.ROBOTO_BOLD));//change font
rowBinding.tv1.setTextColor(ContextCompat.getColor(getContext(), R.color.yourColor));//change color
}
return rowBinding.getRoot();
}
}
yourXML est quelque chose comme ceci:
<?xml version="1.0" encoding="utf-8"?>
<layout>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:background="@color/colorBackgroundStart">
<TextView
Android:id="@+id/tv1"
Android:layout_width="0dp"
Android:layout_weight="0.7"
Android:layout_height="30dp"
Android:textColor="#fff"
Android:textSize="16dp"
Android:layout_marginTop="8dp"
Android:layout_marginBottom="10dp"
Android:layout_marginLeft="8dp"/>
</layout>
créer un spinner avec cet adaptateur et votre XML:
final MyAdapter adapter = new MyAdapter(getContext(), R.layout.yourXML, s.getValues());
final MaterialBetterSpinner spinner = new MaterialBetterSpinner(getContext());
spinner.setAdapter(adapter);
Voir ma réponse à une question similaire ici . Ma réponse est similaire à celle de Priya, à la différence près qu'elle définit correctement la couleur du texte de l'élément sélectionné par défaut (pour qu'il n'y ait pas de décalage avec la mauvaise couleur lorsque vous attendez que le minuteur sélectionne automatiquement l'élément par défaut, ce qui se produit lorsque l'interface écran).