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 ...
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.
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
.
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);
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();
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