2011-07-03 58 views
31

Tôi đang cố gắng đặt một số văn bản loooong vào một AlertDialog. Vấn đề duy nhất kích thước phông chữ mặc định thực sự quá lớn, vì vậy tôi muốn làm cho nó nhỏ hơn.Thay đổi kích thước phông chữ thành một AlertDialog

Dưới đây là tất cả cách giải quyết mà tôi đã thử và các vấn đề của họ.

Cách giải quyết 1) Sử dụng TextView và 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(); 

vấn đề: Giao diện không di chuyển

Cách giải quyết 2) làm TextView cuộn.

message.setMovementMethod(LinkMovementMethod.getInstance()); 

vấn đề: Giao diện được di chuyển, Bute không có "quán tính" (không biết làm thế nào để gọi đó là .. Nhưng tôi đoán bạn hiểu.)

Cách giải quyết 3) Sử dụng một Scrollview.

Đó là những gì tôi sẽ cố gắng, nhưng tôi không thể tin rằng có những giải pháp nào dễ dàng hơn ...

Trả lời

85

Bạn thực sự có thể được tiếp cận với TextView của thông điệp khá dễ dàng, và sau đó thay đổi kích thước của nó. Tôi đã thử nghiệm với kích thước lớn hơn, nhưng bạn có thể sử dụng bất kỳ kích thước nào bạn muốn. Các văn bản sẽ di chuyển độc đáo như nó đã làm. Id của chế độ xem là 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); 

Đây có thể là giải pháp sạch hơn, mặc dù tôi không chắc chắn có nguy cơ TextView có thể bị vô hiệu hay không.

+0

nhờ cho câu trả lời của bạn. –

+1

tốt, đối tượng textView văn bản có vẻ là null – gaara87

+2

Bạn phải gọi setMessage() khi xây dựng hộp thoại, nếu không sẽ không có văn bản xem tin nhắn ở nơi đầu tiên. –

3

Đây là giải pháp của tôi ... bạn cần tạo vùng chứa cuộn, sau đó thêm TextView bên trong ScrollView giống như bạn làm trong bố cục 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

Đồng thời nói đùa! Cảm ơn nhiều. –

24

Tôi đang sử dụng đoạn mã sau để thay đổi tiêu đề và tin nhắn văn bản cho AlertDialog ...

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

... đảm bảo rằng tôi kiểm tra cho null trong setTitleFontsetBodyFont tôi phương pháp.

+0

Điều này làm việc để có được Tiêu đề Xem (cảm ơn!), nhưng một khi tôi nhận được nó, tôi chỉ có thể đặt hai phông chữ: phông chữ chuẩn, và một phông chữ nhỏ (với 11.0 cho giá trị). –

+0

Điều này đã giúp tôi đặt phông chữ từ thư mục nội dung thành tiêu đề của hộp cảnh báo. Tốt nhất! – jmacedo

+1

Cảm ơn rất nhiều! Sử dụng điều này tôi đã có thể thay đổi kích thước phông chữ tiêu đề như sau: int alertTitle = context.getResources(). GetIdentifier ("alertTitle", "id", "android"); Xem tiêu đề = dialog.findViewById (alertTitle); if (title! = Null && title instanceof TextView) { ((Tiêu đề TextView)) .setTextSize (14); } –

4

Đối với Buttons:

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

Không chắc chắn tại sao điều này không nhận được bất kỳ upvotes.Đó có thể không phải là một câu trả lời cho câu hỏi trực tiếp của OP nhưng ngay sau khi bạn làm cho tin nhắn lớn hơn/nhỏ hơn, bạn cũng có thể muốn làm cho văn bản nút lớn hơn Điều này có vẻ giống như một cách tốt đẹp, tự nhiên (alright, ít nhất javascript-y) để hoàn thành nhiệm vụ nếu nó phải được thực hiện trong thời gian chạy anyway. .com/a/6563075/165164) và đặt hai dòng này vào bên trong người nghe, ngoài ra, không bận tâm đến cuộc gọi getDimen, chỉ cần đặt kích thước. –

Các vấn đề liên quan