2010-08-11 40 views
5

Tôi muốn tạo hộp nhập liệu có nút gửi ở bên phải. Giữa họ, họ nên kéo dài chiều rộng của màn hình. Hiện nay tôi có:LinearLayout được điền từ phải sang trái

LinearLayout row= new LinearLayout(context); 
row.setOrientation(HORIZONTAL); 
row.setGravity(Gravity.RIGHT); 
EditText input = new EditText(context); 
Button submit = new Button(context); 
submit.setText("Submit"); 
row.addView(submit); 
row.addView(input,LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT); 
myView.addView(row,LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT); 

Điều này dẫn đến sự phân bố đúng đắn về không gian: Các nút gửi chiếm không gian nhiều như nó cần, nút đầu vào chiếm không gian còn lại, tuy nhiên họ là những cách sai tròn (các nút gửi ở bên trái, mặc dù đặt trọng lực). Nếu tôi lấy đi trọng lực, và đảo ngược thứ tự thêm các phần tử vào hàng, hộp đầu vào chiếm toàn bộ chiều rộng của màn hình và nút gửi không hiển thị. Tôi đang làm gì sai?

Trả lời

4

Tôi muốn nói nó là tốt hơn để sử dụng bố trí tương đối và đặt đầu vào ở bên trái của nút. Nhưng nếu bạn thực sự cần điều này với bố cục Tuyến tính, bạn chỉ có thể sử dụng thông số trọng số:

LinearLayout row= new LinearLayout(context); 
    EditText input = new EditText(context); 
    Button submit = new Button(context); 
    submit.setText("Submit"); 
    LayoutParams inputParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    inputParams.weight = 1; 
    row.addView(input,inputParams); 
    LayoutParams buttonParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    buttonParams.weight = 0; 
    row.addView(submit, buttonParams); 
+1

Và có, tôi nghĩ rằng không nên tạo bố cục từ mã. Vì vậy, làm điều này chỉ khi bố trí xml là hoàn toàn không thể cho trường hợp của bạn. –

+0

Tôi vẫn còn tương đối mới đối với Android và cho đến nay mọi thứ trong dự án này đều dựa trên mã. Tôi sẽ sử dụng xml trong các dự án tương lai, nhưng bây giờ tôi sẽ lấy giải pháp mã. – fredley

0

Sắp xếp các mục trong LinearLayout theo thứ tự bạn đã thêm chúng. Chuyển đổi hai cuộc gọi addView của bạn.

Thường dễ dàng hơn để đạt được bố cục phù hợp với tệp xml bố cục. Ví dụ:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <EditText 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"/> 

    <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
</LinearLayout> 
+0

Hmmm. Có vẻ như phản trực giác rằng tôi nên đặt Gravity thành RIGHT, sau đó mọi thứ sẽ được xếp chồng lên nhau từ bên trái. Oh well. – fredley

+0

Đó không phải là ý nghĩa của lực hấp dẫn: http://developer.android.com/reference/android/view/Gravity.html –

3

Hãy thử thêm EditText đầu tiên thiết lập chiều rộng của nó để fill parent và trọng lượng của nó là 1, sau đó vào nút (width = wrap content)

0

Nếu bạn cũng cần xếp hàng các nút trên dòng tiếp theo, bạn cũng có thể sử dụng TableLayout. Nhìn vào apidemos cho mẫu mã.

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