J'ai un problème avec les téléphones Droid X où les utilisateurs disent que la couleur de la police se révèle être blanche dans le spinner, la rendant invisible à moins que les utilisateurs ne mettent en surbrillance les éléments. Aucun autre téléphone ne semble avoir ce problème. J'allais essayer de forcer la police à être noire pour voir si cela aide. Comment puis je faire ça?
Voici comment je remplis actuellement le spinner. Il semble que le simple_spinner_item
est cassé sur Droid X's.
String spin_arry[] = new String[str_vec.size()];
str_vec.copyInto(spin_arry);
ArrayAdapter adapter =
new ArrayAdapter(this,Android.R.layout.simple_spinner_item, spin_arry);
Je vais utiliser Spinner
exemple de projet de Android SDK pour les prochains exemples de code.
Code:
Tout d'abord, vous devez créer votre adaptateur personnalisé qui interceptera la création de vues dans la liste déroulante:
static class CustomArrayAdapter<T> extends ArrayAdapter<T>
{
public CustomArrayAdapter(Context ctx, T [] objects)
{
super(ctx, Android.R.layout.simple_spinner_item, objects);
}
//other constructors
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent)
{
View view = super.getView(position, convertView, parent);
//we know that simple_spinner_item has Android.R.id.text1 TextView:
/* if(isDroidX) {*/
TextView text = (TextView)view.findViewById(Android.R.id.text1);
text.setTextColor(Color.RED);//choose your color :)
/*}*/
return view;
}
}
Ensuite, vous créez un adaptateur dans votre code comme ceci:
String [] spin_arry = getResources().getStringArray(R.array.Planets);
this.mAdapter = new CustomArrayAdapter<CharSequence>(this, spin_arry);
Explication:
Comme CustomArrayAdapter
sait que nous utilisons la ressource de mise en page intégrée d'Android, il sait également que le texte sera placé dans TextView
avec l'id Android.R.id.text1
. C'est pourquoi il peut intercepter la création de vues dans la liste déroulante et changer la couleur du texte en n'importe quelle couleur nécessaire.
Capture d'écran:
Simple et net ...
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) {
}
};
écrire un R.layout.simplespinneritem:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
Android:singleLine="true"
Android:layout_width="match_parent"
Android:layout_height="wrap_content" />
L'ID est Android:id="@Android:id/text1"
, définissez la couleur de la police et de l'arrière-plan.
ArrayAdapter adapter =
new ArrayAdapter(this,packagename.R.layout.simple_spinner_item, spin_arry);
public class ee extends Activity{
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.ww);
addListenerOnSpinnerItemSelection();
}
public void addListenerOnSpinnerItemSelection(){
ArrayList<String> array = new ArrayList<String>();
array.add("item0");
Spinner spinner1;
ArrayAdapter<String> mAdapter;
spinner1= (Spinner) findViewById(R.id.spinner2);
spinner1= new ArrayAdapter<String>(this, R.layout.spinner_item, array);
spinner1.setAdapter(mAdapter);
}
}
et dans xml res/layout ajouter un nouveau fichier xml: type layout, spinner
(dans spinner_item.xml)
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:gravity="top"
Android:singleLine="true"
Android:textColor="#00f0ff" />
Pour ajouter à la réponse de sasad, faites une copie de ce fichier, que vous pouvez trouver dans votre dossier Android, dans votre projet, changez la couleur du texte de TextView dans ce fichier et utilisez cette disposition lors de l'initialisation de l'adaptateur au lieu d'Android.
Vous pouvez également essayer cette approche dans laquelle vous ajoutez 2 nouveaux fichiers de ressources de mise en page
et utilisez-les dans le code.
String spin_arry[] = new String[str_vec.size()];
str_vec.copyInto(spin_arry);
ArrayAdapter adapter =
new ArrayAdapter(this,R.layout.custom_simple_spinner_item, spin_arry);
adapter.setDropDownViewResource(R.layout.custom_spinner_dropdown_item);
custom_spinner_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/text1"
style="?attr/spinnerDropDownItemStyle"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:ellipsize="Marquee"
Android:fontFamily="@font/roman"
Android:singleLine="true"
Android:textAlignment="inherit"
Android:textColor="@color/black"
Android:textSize="14sp">
</TextView>
custom_spinner_dropdown_item.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/text1"
style="?attr/spinnerDropDownItemStyle"
Android:layout_width="match_parent"
Android:layout_height="?attr/dropdownListPreferredItemHeight"
Android:ellipsize="Marquee"
Android:fontFamily="@font/roman"
Android:singleLine="true"
Android:textAlignment="textStart"
Android:textColor="@color/black"
Android:textSize="14sp">
</TextView>
Codage heureux !! :)