2011-07-03 34 views
31

Próbuję umieścić trochę Looong tekst w AlertDialog. Jedyny problem z domyślnym rozmiarem czcionki, dlatego chcę go zmniejszyć.Zmiana rozmiaru czcionki na AlertDialog

Oto całe obejście, które próbowałem i ich problemy.

Obejście 1) Korzystanie z obiektów TextView i 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(); 

Problemy: Układ nie jest przewijanie

Obejście 2) dokonywania TextView przewijania.

message.setMovementMethod(LinkMovementMethod.getInstance()); 

Problemy: Układ jest przewijany Bute nie ma "bezwładność" (nie wiem jak to nazwać .. Ale myślę, że rozumiesz.)

Obejście 3) Używanie Scrollview.

To, co mam zamiar spróbować, ale nie mogę uwierzyć, że nie są prostsze rozwiązania ...

Odpowiedz

85

można rzeczywiście uzyskać dostęp do TextView na wiadomość jest dość łatwo, a następnie zmienić jego rozmiar. Testowałem z większym rozmiarem, ale możesz użyć dowolnego rozmiaru. Tekst będzie ładnie przewijał, tak jak już to robi. id widoku jest 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); 

Prawdopodobnie jest to czystsze rozwiązanie, choć nie jestem pewien, czy istnieje ryzyko, że TextView może być zerowy lub nie.

+0

dzięki za odpowiedź. –

+1

cóż, obiekt tekstowy textView wydaje się mieć wartość null – gaara87

+2

Musisz wywołać funkcję setMessage() podczas budowania okna dialogowego, w przeciwnym razie nie byłoby wiadomości tekstowej wiadomości w pierwszej kolejności. –

3

Oto moje rozwiązanie ... trzeba utworzyć kontener przewijania, a następnie dodać TextView wewnątrz Scrollview tak samo jak w układzie 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); 
+0

ALSO woking! Bardzo dziękuję. –

24

Używam poniższy kod, żeby zmienić tytuł i tekst wiadomości dla AlertDialog ...

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

... upewniając się, że mogę sprawdzić null w moich setTitleFont i setBodyFont metod.

+0

To działało na uzyskanie tytułu Widok (dzięki!), ale gdy już to zrobiłem, mogłem ustawić tylko dwie czcionki: standardową i małą czcionkę (11.0 dla wartości). –

+0

To działało dla mnie, aby ustawić czcionkę z folderu zasobów na tytuł pola alertu. Dobry! – jmacedo

+1

Wielkie dzięki! Dzięki temu mogłem zmienić rozmiar czcionki tytułowej w następujący sposób: int alertTitle = context.getResources(). GetIdentifier ("alertTitle", "id", "android"); Wyświetl tytuł = dialog.findViewById (alertTitle); if (title! = Null && title instanceof TextView) { (tytuł (TextView)) .setTextSize (14); } –

4

przycisków:

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(); 
+0

Nie wiem, dlaczego to nie robi żadnych przebojów. Może to nie być odpowiedź na bezpośrednie pytanie OP, ale gdy tylko zwiększysz/zmniejszysz komunikat, możesz chcieć powiększyć tekst przycisku/Wydaje mi się, że to dobry, naturalny (w porządku, przynajmniej javascript-y) sposób wykonania zadania, jeśli i tak trzeba to zrobić w czasie wykonywania: Połączyłem to z akceptowaną dobrą odpowiedzią (http: // stackoverflow .com/a/6563075/165164) i umieścić te dwie linie wewnątrz słuchacza, a także nie zawracać sobie głowy wywołaniem getDimen, wystarczy ustawić rozmiar: Nie zapomnij zadeklarować ogłoszenia końcowego! –

Powiązane problemy