Pourquoi est-ce que je veux faire cela est une autre discussion, mais je dois trouver le meilleur moyen de faire en sorte que tous mes dialogues d'alerte aient le bouton positif à droite. Notez que dans la version 3.0 et au-dessous, les boutons apparaissent normalement comme OK/Annuler et dans la version 4.0 et au-dessus, il s'agit de Annuler/OK. Je veux forcer mon application à utiliser Annuler/OK de la manière la plus simple possible. J'ai beaucoup de AlertDialogs dans l'application.
Malheureusement, je ne crois pas que vous puissiez le faire. Cependant, pour citer la documentation :
Remarque: Vous ne pouvez ajouter qu'un seul type de bouton à AlertDialog. C'est-à-dire que vous ne pouvez pas avoir plus d'un bouton "positif". Cela limite le nombre de boutons possibles à trois: positif, neutre et négatif. Ces noms ne sont techniquement pas pertinents pour la fonctionnalité réelle de vos boutons, mais devraient vous aider à savoir qui fait quoi.
Ainsi, vous pouvez transformer les différents boutons en ce que vous voulez. Ce que vous voyez ici, c’est l’ordre ayant changé (ordre de ceci réponse):
Vous pouvez essayer de vérifier le Build.VERSION
et de l'utiliser pour décider quel bouton correspond à lequel au moment de l'exécution.
c'est ma solution. C'est un travail pour moi.
// Show alertDialog after building
AlertDialog alertDialog = createAlertDialog(context);
alertDialog.show();
// and find positiveButton and negativeButton
Button positiveButton = (Button) alertDialog.findViewById(Android.R.id.button1);
Button negativeButton = (Button) alertDialog.findViewById(Android.R.id.button2);
// then get their parent ViewGroup
ViewGroup buttonPanelContainer = (ViewGroup) positiveButton.getParent();
int positiveButtonIndex = buttonPanelContainer.indexOfChild(positiveButton);
int negativeButtonIndex = buttonPanelContainer.indexOfChild(negativeButton);
if (positiveButtonIndex < negativeButtonIndex) {
// prepare exchange their index in ViewGroup
buttonPanelContainer.removeView(positiveButton);
buttonPanelContainer.removeView(negativeButton);
buttonPanelContainer.addView(negativeButton, positiveButtonIndex);
buttonPanelContainer.addView(positiveButton, negativeButtonIndex);
}
Vous pouvez étendre le AlertDialog.Builder
pour forcer la commande:
public class MyDialog extends AlertDialog.Builder {
public MyDialog(Context arg0) {
super(arg0);
}
@Override
public Builder setPositiveButton(CharSequence text, OnClickListener listener) {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
return super.setNegativeButton(text, listener);
} else {
return super.setPositiveButton(text, listener);
}
}
@Override
public Builder setNegativeButton(CharSequence text, OnClickListener listener) {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
return super.setPositiveButton(text, listener);
} else {
return super.setNegativeButton(text, listener);
}
}
}
J'ai pensé que je pouvais simplement définir le texte du bouton positif sur Annuler et le négatif sur OK, mais il s'avère qu'ils sont dans l'ordre alphabétique.
J'ai créé une solution pour forcer l'ordre des boutons pour n'importe quelle version Android sur n'importe quel appareil.
L'idée est que nous pouvons obtenir une liste de boutons de dialogue afin qu'ils apparaissent à l'écran et définir le texte et les actions dans l'ordre que nous voulons. Cela garantit que nous aurions le même ordre sur tous les appareils.
S'il vous plaît vérifier mon GitHub référentiel
Voici un exemple de création et d’affichage du dialogue:
new FixedOrderDialogFragment.Builder()
.setLeftButtonText(R.string.left)
.setCenterButtonText(R.string.center)
.setRightButtonText(R.string.right)
.setDefaultButton(FixedOrderDialogFragment.BUTTON_RIGHT)
.setMessage(R.string.message)
.setTitle(R.string.app_name)
.create()
.show(getSupportFragmentManager(), "DEMO");
Veuillez noter que l'activité propriétaire doit implémenter FixedOrderDialogFragment.FixedOrderDialogListener pour pouvoir restaurer l'état de la boîte de dialogue lors de la recréation de l'activité.
Parfois, des perspectives complètement différentes sont la solution à un problème, la culture des utilisateurs HI.
Sous Android, le HI est assez différent en raison de l'existence du bouton "Précédent" du système d'exploitation (onBackPressed () qui peut également être remplacé, ESC sur les claviers physiques connectés) dans le système d'exploitation HI.
alors vous pouvez définir des boutons comme les codes suivants
builder.setNeutralButton ("Negative", auditeur);
builder.setNegativeButton ("Neutral", auditeur);
builder.setPositiveButton ("Positif", auditeur);