2012-03-13 49 views
41

Tôi đặt mô-đun trò chuyện trong trò chơi vào ứng dụng. Tôi đang thêm tin nhắn văn bản khi chúng được nhận vào chế độ xem LinearLayout. Tôi muốn thiết lập các thông số bố cục cho TextView nhưng mã sau đây bị lỗi và các thông báo lỗi sẽ làm rối tôi.android - cài đặt LayoutParams theo lập trình

private void addChat(String chat, String when, Boolean mine) { 
    int leftMargin; 

    TextView tv = new TextView(this); 
    llview.addView(tv); 
    tv.setTextColor(Color.WHITE); 
    tv.setTextSize(2,25); 
    tv.setText(chat); 
    if (mine) { 
     leftMargin = 5; 
     tv.setBackgroundColor(0x7C5B77); 
    } 
    else { 
     leftMargin = 50; 
     tv.setBackgroundColor(0x778F6E); 
    } 
    final ViewGroup.MarginLayoutParams lpt =(MarginLayoutParams)tv.getLayoutParams(); 
    lpt.setMargins(leftMargin,lpt.topMargin,lpt.rightMargin,lpt.bottomMargin); 

    tv.setLayoutParams(new ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.WRAP_CONTENT, 
      ViewGroup.LayoutParams.WRAP_CONTENT)); 

} 

khi nó chạy, tất cả các mã trên thực hiện nhưng nó bị treo trong thời gian chạy android như:

03-13 14:15:38.513: E/AndroidRuntime(12985): java.lang.ClassCastException:  android.view.ViewGroup$LayoutParams 

và bước qua với trình gỡ lỗi, nó thực sự sẽ xử lý tất cả các dòng

nhưng sau đó là barfs khi cố gắng hiển thị với thông báo chi tiết ngoại lệ bí ẩn như nhau:

android.view.ViewGroup$LayoutParams 

Vì vậy, những gì đã làm để có được trạng thái này? Tôi nên làm gì để xen kẽ các thông điệp thụt lề trái/phải?

Trả lời

83

Chỉ cần thay thế từ dưới và thêm này

tv.setLayoutParams(new ViewGroup.LayoutParams(
    ViewGroup.LayoutParams.WRAP_CONTENT, 
    ViewGroup.LayoutParams.WRAP_CONTENT)); 

trước

llview.addView(tv); 
+1

Cách đặtLayoutParams trong giá trị 'dp' thay vì' wrap_content' hoặc 'match_parent'. Tôi muốn đặt nó thành '100dp' mỗi cái. –

+0

Tôi có cùng một câu hỏi và không thể tìm ra giải pháp. – Prabhakar

24

sau khi tạo chế độ xem, chúng tôi phải thêm thông số bố cục.

thay đổi như thế này

TextView tv = new TextView(this); 
tv.setLayoutParams(new ViewGroup.LayoutParams(
     ViewGroup.LayoutParams.WRAP_CONTENT, 
     ViewGroup.LayoutParams.WRAP_CONTENT)); 

llview.addView(tv); 
tv.setTextColor(Color.WHITE); 
tv.setTextSize(2,25); 
tv.setText(chat); 
if (mine) { 
    leftMargin = 5; 
    tv.setBackgroundColor(0x7C5B77); 
} 
else { 
    leftMargin = 50; 
    tv.setBackgroundColor(0x778F6E); 
} 
final ViewGroup.MarginLayoutParams lpt =(MarginLayoutParams)tv.getLayoutParams(); 
lpt.setMargins(leftMargin,lpt.topMargin,lpt.rightMargin,lpt.bottomMargin); 
+3

'lpt.setMargins (..) 'dường như không để có hiệu lực. Cho dù tôi đặt nó là 2 hoặc 20, nó trông giống hệt nhau. Tôi thấy không có không gian tạo ra cho các lợi nhuận ở tất cả. Tôi đã thử nó cho một 'LinearLayout', không phải' TextView'. – faizal

+1

^tv.setLayoutParams (lpt) sau lệnh lpt.setMargins() yêu cầu – worked

+0

Cách setLayoutParams trong giá trị 'dp' thay vì' wrap_content' hoặc 'match_parent'. Tôi muốn đặt nó thành '100dp' mỗi cái. –

0
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
        /*width*/ ViewGroup.LayoutParams.MATCH_PARENT, 
        /*height*/ ViewGroup.LayoutParams.MATCH_PARENT, 
        /*weight*/ 1.0f 
      ); 
      YOUR_VIEW.setLayoutParams(param); 
Các vấn đề liên quan