2011-09-04 26 views
12

Tôi có hai nút mà tôi muốn tự động cân cho một tùy chọn. Chúng bắt đầu với trọng lượng là 0,5 (tất nhiên là tăng thêm trọng lượng của LinearLayout là 1), nhưng nếu tùy chọn là đúng, thì tôi muốn thay đổi trọng số của chúng thành .7 và .3 tương ứng. Tôi có thể đặt trọng số trong XML nhưng dường như tôi không thể tìm cách thay đổi nó theo chương trình.Đặt trọng lượng (phần trăm) theo chương trình


Giải pháp

LinearLayout.LayoutParams PO = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, .60f); 
LinearLayout.LayoutParams MO = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, .20f); 
+0

Kiểm tra câu trả lời của tôi trên http://stackoverflow.com/questions/4641072/how-to-set-layout-weight-attribute-dynamically-from-code#answer-13943330 – gantzer89

Trả lời

9

Nhìn vào LayoutParams, nó có một lĩnh vực để thiết lập trọng lượng

+4

Yop, tôi đã kết thúc với : 'LinearLayout.LayoutParams PO = new LinearLayout.LayoutParams (LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, .60f); \t \t LinearLayout.LayoutParams MO = new LinearLayout.LayoutParams (LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, .20f); ' – ecirish

+2

@ecirish Tôi đã thêm giải pháp của bạn vào đuôi câu hỏi, để hiển thị tốt hơn –

2

Sử dụng này để tái chế các đối tượng LayoutParam:

((LinearLayout.LayoutParams) view.getLayoutParams()).weight = 0.2f; 
view.refreshDrawableState(); // This is to explicit force the refresh. 
2

Nếu constructor có chiều rộng , chiều cao và cân nặng không hoạt động, hãy thử sử dụng hàm tạo có chiều rộng và chiều cao. Và sau đó đặt trọng lượng theo cách thủ công.

Và nếu bạn muốn chiều rộng được đặt theo trọng số, hãy đặt chiều rộng là 0 trong hàm tạo. Tương tự áp dụng cho chiều cao. Mã dưới đây hoạt động cho tôi.

LinearLayout.LayoutParams childParam1 = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT); 
childParam1.weight = 0.3f; 
child1.setLayoutParams(childParam1); 

LinearLayout.LayoutParams childParam2 = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT); 
childParam1.weight = 0.7f; 
child2.setLayoutParams(childParam2); 

parent.setWeightSum(1f); 
parent.addView(child1); 
parent.addView(child2); 
Các vấn đề liên quan