web-dev-qa-db-fra.com

Changer la taille de la police en AlertDialog

J'essaie de mettre du texte loooong dans AlertDialog . Le seul problème, la taille de police par défaut qui est vraiment trop grande, je veux donc le réduire.

Voici toute la solution de contournement que j'ai essayée et leurs problèmes.

Solution de contournement 1) Utilisation d'un TextView et de myView.setTextSize (12);

final TextView myView = new TextView(getApplicationContext());
myView.setText(myLongText);
myView.setTextSize(12);
final AlertDialog d = new AlertDialog.Builder(context)
    .setPositiveButton(Android.R.string.ok, null)
.setTitle(myTitle)
.setView(myView)
.create();

Problèmes: la mise en forme ne défile pas

Solution de contournement 2) faisant défiler TextView.

message.setMovementMethod(LinkMovementMethod.getInstance());

Issues: La mise en page défile, mais il n'y a pas "d'inertie" (je ne sais pas comment appeler ça .. Mais je suppose que vous comprenez.)

Solution de contournement 3) Utilisation d'une vue de défilement.

C'est ce que je vais essayer, mais je ne peux pas croire qu'il n'y a pas de solution plus facile ...

35
Waza_Be

Vous pouvez en fait accéder assez facilement au message TextView, puis en modifier la taille. J'ai testé avec une taille plus grande, mais vous pouvez utiliser la taille de votre choix. Le texte défilera comme il le fait déjà. La vue id est Android.R.id.message

    AlertDialog dialog = new AlertDialog.Builder(this).setMessage("Hello world").show();
    TextView textView = (TextView) dialog.findViewById(Android.R.id.message);
    textView.setTextSize(40);

C'est probablement une solution plus propre, bien que je ne sois pas sûr qu'il existe un risque que le TextView puisse être null ou non. 

102
Gregory

J'utilise le code suivant pour modifier le titre et le texte du message pour AlertDialog ...

final int alertTitle = ctx.getResources().getIdentifier("alertTitle", "id", "Android");
setTitleFont((TextView) dlg.findViewById(alertTitle));
setBodyFont((TextView) dlg.findViewById(Android.R.id.message));

… En veillant à vérifier null dans mes méthodes setTitleFont et setBodyFont.

25
Sileria

Voici ma solution ... vous devez créer le conteneur de défilement, puis ajouter le TextView à l'intérieur du ScrollView comme vous le feriez dans la présentation XML.

AlertDialog alertDialog = new AlertDialog.Builder(this).create();
String str = getString(R.string.upgrade_notes); 
final ScrollView s_view = new ScrollView(getApplicationContext());
final TextView t_view = new TextView(getApplicationContext());
t_view.setText(str);
t_view.setTextSize(14);     
s_view.addView(t_view);
alertDialog.setTitle("Upgrade notes!");
alertDialog.setView(s_view);
4
kenyu73

Pour les boutons:

  final AlertDialog ad = new AlertDialog.Builder(mainScreen)
.setPositiveButton("OK", null) 
.setNegativeButton("Cancel", null).create();

ad.setOnShowListener(new DialogInterface.OnShowListener() {
                                            @Override
                                            public void onShow(DialogInterface dialog) {
                                                int textSize = (int) Helper.getDimen(mainScreen, R.dimen.textSize12);
                                                ad.getButton(Dialog.BUTTON_POSITIVE).setTextSize(textSize);
                                                ad.getButton(Dialog.BUTTON_NEGATIVE).setTextSize(textSize);
                                            }


                                      });

ad.show();
4
M. Usman Khan

Vous pouvez résoudre ce problème en utilisant SpannableStringBuilder au lieu d'une chaîne.

http://www.Android--tutorials.com/2016/10/Android-change-alertdialog-title-text_21.html

0
sean