2011-01-09 25 views
235

Tôi có một bố trí tương đối mà tôi đang tạo ra cách lập trình:Cách đặt thuộc tính layout_align_parent_right của một nút trong Bố cục tương đối theo lập trình?

RelativeLayout layout = new RelativeLayout(this); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, 
      LayoutParams.WRAP_CONTENT); 

Bây giờ tôi có hai nút mà tôi muốn thêm trong cách bố trí tương đối này. Nhưng vấn đề là cả hai nút đang được hiển thị ở bên trái của RelatiiveLayout chồng lên nhau.

buttonContainer.addView(btn1); 
buttonContainer.addView(btn2); 

Bây giờ tôi muốn biết làm thế nào tôi có thể lập trình thiết lập các android:layout_alignParentRight="true " hoặc android:layout_toLeftOf="@id/btn" thuộc tính của nút như chúng ta làm trong xml?

Trả lời

561

Bạn có thể truy cập bất kỳ LayoutParams nào từ mã sử dụng View.getLayoutParams. Bạn chỉ cần biết rất rõ về những gì bạn đang truy cập. Điều này thường đạt được bằng cách kiểm tra có chứa ViewGroup nếu nó có một con bên trong LayoutParams thì đó là một trong những bạn nên sử dụng. Trong trường hợp của bạn là RelativeLayout.LayoutParams. Bạn sẽ được sử dụng RelativeLayout.LayoutParams#addRule(int verb)RelativeLayout.LayoutParams#addRule(int verb, int anchor)

Bạn có thể tới nó thông qua mã:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)button.getLayoutParams(); 
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
params.addRule(RelativeLayout.LEFT_OF, R.id.id_to_be_left_of); 

button.setLayoutParams(params); //causes layout update 
+1

nếu neo không có id? params.addRule (RelativeLayout.LEFT_OF, R.id.id_to_be_left_of); TextView tvUserName = new TextView (hành động); –

+13

cách thêm ID? – user2161301

+1

Nếu nút 'nằm trên' RecycleView' thì sao? Nó không phải là một vấn đề thêm các quy tắc tương tự hoặc ngược lại với cùng một widget? –

10
  1. bạn cần phải tạo và id cho nút bạn cần phải refference: btn1.setId(1);
  2. bạn có thể sử dụng biến params để thêm thông số vào bố cục của bạn, i nghĩ phương pháp là addRule(), kiểm tra tài liệu java android cho đối tượng LayoutParams này.
+0

tôi sẽ đánh giá cao bất kỳ đoạn mã. Tôi không tìm thấy bất kỳ phương pháp trong nút. –

+0

Id cài đặt không có tác dụng vì nó đang mong đợi một id tài nguyên thực thay vì chỉ là một số vì setId đang được chú thích bằng @IdRes. –

+0

đó là mới sau đó, trong quá khứ bạn có thể lấy một số tài nguyên từ bố trí ví dụ và sử dụng nó như là một cơ sở cho id tài nguyên sẽ không collide.i đoán google phải có bị chặn/ – codeScriber

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