2012-09-20 10 views
17

Tôi cố gắng lập trình đặt thuộc tính AlignParentRight thành nút trong RelativeLayout nhưng chương trình bị lỗi với NullPointerException. Ở đây mã của tôi:Thuộc tính thiết lập thuộc tính AlignParentRight thành nút trong RelativeLayout không hoạt động?

//add horizontal realative layout 
RelativeLayout layouth = new RelativeLayout(this); 
layouth.setLayoutParams(new RelativeLayout.LayoutParams(
     LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

//add textview for label 
TextView t = new TextView(this); 
t.setText(d.getName()); 
t.setTextSize(25); 
t.setId(2);  
t.setLayoutParams(new RelativeLayout.LayoutParams(
     LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

//add button 
Button b = new Button(this); 
b.setText(d.getName()); 
RelativeLayout.LayoutParams layoutParams =(RelativeLayout.LayoutParams)b.getLayoutParams(); 
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
layoutParams.addRule(RelativeLayout.LEFT_OF, 2); 
b.setLayoutParams(layoutParams); 

//add textview and button to horizontal linear layout 
layouth.addView(t); 
layouth.addView(b); 
//add horizontal linear layout to vertical linear layout 
layoutv = (LinearLayout) findViewById(R.id.ProjectViewLinearID); 
layoutv.addView(layouth); 

Vấn đề của tôi ở đâu? Lỗi này xảy ra trong dòng chương trình layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

CẬP NHẬT VỚI GIẢI PHÁP:

Mã này làm việc cho tôi:

// Creating a new RelativeLayout 
RelativeLayout layouth = new RelativeLayout(this); 

// Defining the RelativeLayout layout parameters. 
// In this case I want to fill its parent 
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
     RelativeLayout.LayoutParams.MATCH_PARENT, 
     RelativeLayout.LayoutParams.MATCH_PARENT); 

// Creating a new TextView 
TextView tv = new TextView(this); 
tv.setText(d.getName()); 
tv.setTextSize(25); 

//add button 
Button b = new Button(this); 
b.setText(d.getName()); 

// Defining the layout parameters of the TextView 
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
     RelativeLayout.LayoutParams.WRAP_CONTENT, 
     RelativeLayout.LayoutParams.WRAP_CONTENT); 
     lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 

// Setting the parameters on the TextView 
tv.setLayoutParams(lp); 
b.setLayoutParams(lp); 

// Adding the TextView to the RelativeLayout as a child 
layouth.addView(tv); 
layouth.addView(b); 
+2

bên cạnh những lỗi mà bạn quan sát đã bạn sẽ nhận được một 'ClassCastException' tiếp theo: 'layouth' cần' LinearLayout.LayoutParams' kể từ khi params là dành cho phụ huynh bố cục là 'LinearLayout' (' layoutv') – zapl

+0

lp.addRule (RelativeLayout.ALIGN_PARENT_RIGHT); –

Trả lời

8

Khi bạn gọi b.getLayoutParams(), b không phải là trong một bố cục. do đó, nó không có một layoutparams (cộng với, nó sẽ không biết rằng bạn đang mong đợi một RelativeLayout.LayoutParams tại thời điểm này).

Bạn cần tạo một thể hiện LayoutParams mới, giống như bạn đã làm cho TextView.

+0

Cảm ơn, đã giải quyết được vấn đề của tôi. Tôi cập nhật bài đăng đầu tiên của mình bằng mã được cập nhật. –

+0

np. kiểm tra bình luận zapl là tốt, có trong thực tế một cái gì đó sai với layoutparams để thêm layouth để layoutv – njzk2

15

thay

RelativeLayout.LayoutParams layoutParams =(RelativeLayout.LayoutParams)b.getLayoutParams(); 

với

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.MATCH_PARENT, 
       RelativeLayout.LayoutParams.WRAP_CONTENT); 
+0

những gì về alignParentRight/alignParentLeft được thêm vào mã @MukeshSoni? – gumuruh

+5

@gumuruh thêm vào mã như sau: layoutParams.addRule (RelativeLayout.ALIGN_PARENT_RIGHT); – Toni

+0

. đó là mã: D – gumuruh