2010-08-19 47 views
42

Tôi đã tự hỏi liệu có cách nào hiển thị tất cả văn bản trong bánh mì nướng được căn giữa không. Ví dụ, tôi có một bánh mì nướng có 2 dòng văn bản trong đó. Vì lý do thẩm mỹ hoàn toàn, tôi muốn văn bản được căn giữa thay vì căn trái. Tôi đã xem qua các tài liệu và không thể tìm thấy bất cứ điều gì về nó. Có một cách đơn giản để làm điều này mà tôi đã bỏ lỡ?Văn bản trung tâm trong bánh mì nướng trong Android

Cảm ơn Chris

Trả lời

13

Sử dụng của Toast setView(view) chức năng để cung cấp một View với Gravity.CENTER.

26

Bánh mì nướng được xây dựng trên một TextView và trọng lực mặc định của nó được căn trái. Vì vậy, bạn cần phải tạo ra TextView của riêng bạn như thế này ví dụ:

<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center_vertical|center_horizontal" 
    android:text="all the text you want" 
/> 

Và bạn gán TextView vào Toast như thế này:

Toast t = new Toast(yourContext); 
t.setView(yourNewTextView); 
+1

Không cần phải cho quan điểm riêng của mình. Xem câu trả lời được chấp nhận. – erlando

18

Đó là bẩn hack, nhưng

((TextView)((LinearLayout)toast.getView()).getChildAt(0)) 
    .setGravity(Gravity.CENTER_HORIZONTAL); 
+2

Tuyệt vời! Hãy chắc chắn rằng bạn bao quanh với một 'ClassCastException' bắt được an toàn trong trường hợp hệ thống phân cấp khung nhìn của Toasts thay đổi trong tương lai. – mxcl

+3

Lưu ý: thử nó và nó không hoạt động trên 4.0.2 – Rick

+0

Điều này hoạt động trên Nexus 4. Tôi đề nghị làm điều này, gói nó với một ClassCastException như Max Howell đã nói ở trên và sau đó sống với nó khi nó ném một ngoại lệ thực sự. –

8
Toast toast = Toast.makeText(this, "Message", Toast.LENGTH_SHORT); 
toast.setGravity(Gravity.CENTER, 0, 0); 
toast.show(); 
+23

Điều này không làm trung tâm văn bản, nhưng chính là bánh mì nướng. –

69

Được điều chỉnh từ another answer:

Toast toast = Toast.makeText(this, "Centered\nmessage", Toast.LENGTH_SHORT); 
TextView v = (TextView) toast.getView().findViewById(android.R.id.message); 
if(v != null) v.setGravity(Gravity.CENTER); 
toast.show(); 
+4

Tại sao trọng lực mặc định không phải là Gravity.CENTER? Silly android! – User9527

4

Không Saing rằng findViewById(android.R.id.message) là sai, nhưng chỉ trong trường hợp có (trong tương lai?) Sự khác biệt thực hiện Bản thân tôi sử dụng một cách tiếp cận chút differen:

void centerText(View view) { 
    if(view instanceof TextView){ 
     ((TextView) view).setGravity(Gravity.CENTER); 
    }else if(view instanceof ViewGroup){ 
     ViewGroup group = (ViewGroup) view; 
     int n = group.getChildCount(); 
     for(int i = 0; i<n; i++){ 
      centerText(group.getChildAt(i)); 
     } 
    } 
} 

và sau đó:

Toast t = Toast.makeText(context, msg,Toast.LENGTH_SHORT); 
centerText(t.getView()); 
t.show(); 
17

Without the hacks:

String text = "Some text"; 
Spannable centeredText = new SpannableString(text); 
centeredText.setSpan(new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER), 
      0, text.length() - 1, 
      Spannable.SPAN_INCLUSIVE_INCLUSIVE); 

Toast.makeText(getActivity(), centeredText, Toast.LENGTH_LONG).show(); 

Ngoài ra còn có một sắp xếp khác ngoài trung tâm.

source

+0

hoạt động như một sự quyến rũ! Đây chính xác là tôi cần! – deeshank

0

Biến thể này là sử dụng LinearLayout. :)

Toast SampleToast = Toast.makeText(this, "This is the example of centered text.\nIt is multiline text.", Toast.LENGTH_SHORT); 
LinearLayout OurLayout = (LinearLayout) SampleToast.getView(); 

if (OurLayout.getChildCount() > 0) 
{ 
TextView SampleView = (TextView) OurLayout.getChildAt(0); 
SampleView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL); 
} 

SampleToast.show(); 
+0

Đây là một giải pháp hacky có thể không hoạt động trong các phiên bản tương lai của android, ví dụ: nếu đứa con đầu tiên không phải là một TextView. Không tuân theo các tiêu chuẩn mã hóa Java. –

-3
Toast t=Toast.makeText(getApplicationContext(),"Text",Toast.LENGTH_LONG); 
t.setText("Password Does't match..."); 
t.setGravity(0, 0, 0); 
t.show(); 

mã đơn giản cho bánh mì nướng nhất là trung tâm

+0

Chào mừng bạn đến với SO.Vui lòng xem qua [trang trợ giúp về trả lời câu hỏi.] (Http://stackoverflow.com/help/how-to-answer). Như được viết, mã của bạn được định dạng kém và không chứa lời giải thích. –

+0

Xin lỗi, nhưng mã của bạn thiết lập trọng tâm trung tâm để bánh mì nướng (nó xuất hiện trong màn hình trung tâm), không phải để văn bản –

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