2015-01-12 32 views
8

là nguồn gốc của các thanh trượt và liên kết bài học:Làm thế nào để thiết lập một cách lập trình chiều rộng của LinearLayout?

http://www.oodlestechnologies.com/blogs/Facebook-Style-Slide-Menu-In-Android

Trong trường hợp này, độ rộng của tập tin "left_menu.xml" xác định TextView (android: layout_width = "260dp") thế nào Tôi đặt chiều rộng thành "LinearLayout" tệp "left_menu.xml" tùy thuộc vào màn hình thiết bị? Ví dụ, tôi muốn chiều rộng của "LinearLayout" luôn luôn là 1/3 của thiết bị màn hình? Hoặc bất kỳ cách nào để thiết lập chiều rộng của TextView 1/3 chiều rộng của màn hình thiết bị.

Trả lời

16

để đặt LinearLayout hoặc TextView chiều rộng để 1/3 của màn hình thiết bị:

trước hết là nhận được màn hình thiết bị width:

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
try { 
    display.getRealSize(size); 
} catch (NoSuchMethodError err) { 
    display.getSize(size); 
} 
int width = size.x; 
int height = size.y; 

bây giờ chỉ cần tạo ra một LayoutParams và đặt nó vào văn bản:

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams((int)(width/3), 
        LinearLayout.LayoutParams.WRAP_CONTENT); // or set height to any fixed value you want 

your_layout.setLayoutParams(lp); 
// OR 
your_textView.setLayoutParams(lp); 
+0

Cảm ơn bạn đã trả lời! Cảm ơn tất cả! Tôi đã sử dụng tất cả các câu trả lời và nhận được mã hoạt động cho tôi. – GAAAN

+0

Tuyệt vời bạn đã giải quyết vấn đề của mình :) –

3
LinearLayout layout = (LinearLayout)findViewById(R.id.ll); 
LayoutParams params = (LayoutParams) layout.getLayoutParams(); 
params.height = 100; 
params.width = 100; 
+0

Cảm ơn bạn đã trả lời! Tôi mới trong lập trình. Tôi đã thử điều này rồi. Tôi không thể loại bỏ lỗi. Tôi chọn gần như tất cả ... (http://f-picture.net/lfp/s017.radikal.ru/i410/1501/ce/d36745f64384.png/htm) Cái nào trong số đó đúng? – GAAAN

+0

cái đầu tiên, android.widget.linearlayout –

+0

hiển thị logcat của bạn –

4
LinearLayout linear = (LinearLayout) findViewById(R.id.ll);  
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
linear.setLayoutParams(params); 

Như bạn thấy, bạn có thể thiết lập giá trị Integer cho LinearLayout.LayoutParams() constructor, như thế này:

LinearLayout.LayoutParams cellParams = new LinearLayout.LayoutParams(0, 100); 

Các costructor muốn pixel và không DP (Mật độ điểm ảnh) , đây là một công thức để chuyển đổi PXS từ DP:

(int) (<numberOfDPs> * getContext().getResources().getDisplayMetrics().density + 0.5f)  
0
LinearLayout YOUR_LinearLayout =(LinearLayout)findViewById(R.id.YOUR_LinearLayout) 
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
        /*width*/ ViewGroup.LayoutParams.MATCH_PARENT, 
        /*height*/ 100, 
        /*weight*/ 1.0f 
        ); 
        YOUR_LinearLayout.setLayoutParams(param); 
0

Câu trả lời ở trên là chính xác. Tôi sẽ chỉ đề nghị người đọc trong tương lai xem xét tệp bố cục xml của họ và đảm bảo rằng phần tử LinearLayout không sử dụng thuộc tính weight. Nếu vậy, hãy cân nhắc việc cập nhật trọng lượng trong đối tượng LayoutParams của bạn. Thực hành tốt khác là truy xuất đối tượng params bố cục từ chế độ xem bạn đang cố gắng điều chỉnh, thay vì tạo một đối tượng từ đầu và phải đặt tất cả các giá trị.

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