Réglage de l'arrière-plan Dessiné avec les états de boutons android
Je suis la construction d'un questionnaire à choix multiples android programme.
J'ai la suite dans ma onCreate() la méthode
btnArray = new Button[5];
btnArray[0] = (Button) findViewById(R.id.bOp1);
btnArray[1] = (Button) findViewById(R.id.bOp2);
btnArray[2] = (Button) findViewById(R.id.bOp3);
btnArray[3] = (Button) findViewById(R.id.bOp4);
btnArray[4] = (Button) findViewById(R.id.bOp5);
Typeface othmanyFont = Typeface.createFromAsset(getAssets(),
"fonts/amiri.ttf");
Drawable shape = getResources().getDrawable(R.drawable.optionbutton);
for(int i=0;i<5;i++){
btnArray[i].setTypeface(myFont);
((Button)btnArray[i]).setBackgroundDrawable(shape); //Button-4 only turns red
btnArray[i].setOnClickListener(this);
}
Le drawable ressources "optionbutton.xml" définit une couleur rouge dégradé pour le "pressé de l'état", et un gris pour les autres états. Elle se présente comme suit
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape>
<gradient
android:startColor="#bf1d00"
android:endColor="#801300"
android:angle="270" />
<corners android:radius="10dp" />
<stroke
android:width="1dp"
android:color="#71c2eb" />
</shape>
</item>
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient android:startColor="#FFFFFF"
android:endColor="#999"
android:angle="270" />
<corners android:radius="10dp" />
<stroke android:width="1px" android:color="#0070b7" />
</shape>
</item>
</selector>
Le sélecteur fonctionne réellement, mais sur le dernier appliquée uniquement le bouton. N'importe quel bouton à partir de la 5 est pressé, le dernier (pas celui pressé) bouton n'obtient que son arrière-plan rouge.
De débogage étape: j'ai essayé de dérouler la boucle for et la modification de la commande de l'application de l'arrière-plan, le dernier appliquée uniquement le bouton obtient fond rouge:
((Button)btnArray[0]).setBackgroundDrawable(shape);
((Button)btnArray[1]).setBackgroundDrawable(shape);
((Button)btnArray[2]).setBackgroundDrawable(shape);
((Button)btnArray[4]).setBackgroundDrawable(shape);
((Button)btnArray[3]).setBackgroundDrawable(shape); //Button-3 only turns red
C'est déroutant!
Quel est le problème avec mon application?
- Avez-vous essayé cette ((Bouton)btnArray[0]).setBackgroundDrawable(forme);
- oui j'ai essayé, même problème. Je vais modifier la question pour éviter toute confusion.
- comment sur le réglage de l'arrière-plan en XML?
- aussi, vous avez
xmlns:android="http://schemas.android.com/apk/res/android"
deux fois. vous ne savez pas si c'est un problème. - J'ai plusieurs XMLs, au moment de l'exécution j'ai choisi rouge-fond pour les mauvaises réponses, vert-fond pour celles qui sont correctes.
Vous devez vous connecter pour publier un commentaire.
Il semble
setBackgroundDrawable()
est obsolète. Vous pouvez utiliser une autre alternative commesetBackgroundResource()
.vous pouvez définir la forme dans un format xml et le bouton de l'état dans un autre, alors essayez ici est le xml pour le bouton afin d'obtenir les différentes etat
Que la méthode setBackgroundDrawable(la forme) est déconseillé, j'ai essayé une autre méthode qui fonctionne parfaitement et a résolu le problème: