2011-07-03 10 views
31

Bazı Loooong metinlerini bir AlertDialog'a yerleştirmeye çalışıyorum. Tek sorun, gerçekten çok büyük olan varsayılan yazı tipi boyutu, bu yüzden daha küçük yapmak istiyorum.Yazı tipi boyutunu bir AlertDialog olarak değiştirme

İşte denediğim geçici çözümler ve sorunları.

Geçici çözüm 1) TextView ve myView.setTextSize (12) kullanma;

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

Sorunlar: Düzen TextView'un kaydırılabilir hale

Geçici çözüm 2) kaydırma değildir.

message.setMovementMethod(LinkMovementMethod.getInstance()); 

Sorunlar: Düzen kaydırma edilir bute hayır "atalet" (.. öyle hitap bilen Ama anlamak tahmin yoktur.)

Geçici çözüm 3) kullanma var bir Scrollview. Ben denemek için gidiyorum bu, ama ben hiç kolay çözüm vardır inanamıyorum

...

cevap

85

Aslında oldukça kolay iletinin TextView erişmek ve daha sonra boyutunu değiştirebilir. Daha büyük boyutta test ettim, ama istediğin büyüklüğü kullanabilirsin. Metin zaten yaptığı gibi güzelce kaydırır. görünümün kimliği android.R.id.message: Ben TextView'un boş ya da değil olabileceğini riski var olmadığından emin değilim gerçi

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

Bu, muhtemelen daha temiz bir çözümdür.

+0

teşekkürler. –

+1

kuyu, textView nesnesi sıfır gibi görünüyor – gaara87

+2

İletişim kutusunu oluştururken setMessage() öğesini çağırmanız gerekir, aksi halde ilk etapta ileti metni görünümü olmaz. –

3

İşte benim çözümüm ... kaydırma kabı oluşturmalısınız, sonra da XML düzeninde yaptığınız gibi ScrollView içine TextView ekleyin. Benim setTitleFont ve setBodyFont yöntemlerde null kontrol emin

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

Ben AlertDialog için başlık ve mesaj metni değiştirmek için aşağıdaki kodu kullanıyorum

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! Çok sağol. –

24

... .... Düğmeler için

+0

Bu, Başlık Görünümü'ne ulaşmak için çalıştı (teşekkürler!), ama bir kez aldığımda sadece iki yazı tipi ayarlayabilirdim: standart yazı tipi ve küçük bir yazı tipi (değer için 11.0 ile). –

+0

Bu, öğeler klasöründen uyarı kutusunun başlığına bir yazı tipi ayarlamak için çalıştı. İyi bir! – jmacedo

+1

Çok teşekkürler! Bunu kullanarak başlık yazı tipi boyutunu değiştirebiliyordum: int alertTitle = context.getResources(). GetIdentifier ("alertTitle", "id", "android"); Başlığı görüntüle = dialog.findViewById (alertTitle); if (title! = Null && TextView başlık başlığı) { ((TextView) başlığı) .setTextSize (14);} –

4

: Cevabınız için

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

Niçin herhangi bir upvotes alamadığından emin değilsiniz. Bu OP'nin doğrudan sorusuna bir cevap olmayabilir, fakat mesajı daha büyük/küçük yaptığınız anda buton metnini büyütmek isteyebilirsiniz. Bu daha iyi bir doğal (iyi, en azından javascript-y) gibi görünüyorsa, o zaman işte yapılması gerekiyorsa, bu görevi yerine getirmek için iyi bir doğal (tamam, en azından javascript-y) gibi görünüyor. Bunu kabul edilen iyi yanıtla birleştirdim (http: // stackoverflow .com/a/6563075/165164) ve bu iki satırı dinleyicinin içine koyun.Ayrıca, getDimen çağrısı ile uğraşmadı, sadece bir boyut belirledi Reklamın finalini ilan etmeyi unutmayın! –