2010-05-19 28 views
36

Dưới đây là một phần từ XML của tôi cho định dạng ĐẤT:Bố cục bảng XML? Hai hàng có chiều rộng EQUAL có các nút có chiều rộng bằng nhau?

<TableLayout 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:layout_gravity="center" 
    android:stretchColumns="*"> 
<TableRow>  
    <Button 
     android:id="@+id/countbutton" 
     android:text="@string/plus1"/>  
    <Button 
     android:id="@+id/resetbutton" 
     android:text="@string/reset" 
     /> 
</TableRow> 
</TableLayout> 

Và bây giờ những gì tôi không nhận được - Chiều rộng của một hàng và cũng có thể của các nút phụ thuộc vào TEXT bên trong nút. Nếu cả hai văn bản dài đều cho phép nói: TEXT của nó ok - nửa bảng là ở giữa màn hình. Nhưng nếu họ có kích thước khác nhau - cho phép nói "A" và "NÀY LÀ NÚT DÀI" TRUNG TÂM của bảng không ở giữa màn hình nữa và do đó các nút không bằng nhau chiều rộng ...

Trả lời

87

Để có các nút ở các hàng có các nút có cùng kích thước bạn cần thực hiện.

<LinearLayout android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <Button android:layout_weight="1" 
      android:layout_height="wrap_content" 
      android:layout_width="0dip"/> 
     <Button android:layout_weight="1" 
      android:layout_height="wrap_content" 
      android:layout_width="0dip"/> 
    </LinearLayout> 

Và điền các thuộc tính xml khác cho các nút của bạn.

Phép thuật nằm trong thuộc tính layout_weight và width. Bạn không cần bố trí Bảng. Các thuộc tính này cho biết bố cục rằng các chế độ xem của bạn sẽ chiếm không gian bằng nhau trong bố cục gốc.

+0

Làm sao người ta thiết lập các giá trị trong mã cho nút tự động tạo ra? –

+0

parant.addView (newView, new LinearLayout.LayoutParams (0/* width * /, WRAP_CONTENT, 1/* trọng lượng * /)); –

+1

Nếu bạn đang tìm kiếm thông qua tìm kiếm, lưu ý rằng bạn cần phải thực hiện android: layout_width = "fill_parent" hoặc giá trị khác trên LinearLayout. Tôi đã nhận được lỗi trong thời gian chạy về làm thế nào tôi cần phải xác định một layout_width, và nó đã cho tôi một thời gian để tìm ra rằng nó đã phàn nàn về LinearLayout, không phải là các mục chứa với chiều rộng bố trí giá trị bằng không. Xem thêm http: // stackoverflow.com/questions/1177020/android-how-to-make-tất cả các yếu tố-bên trong-linearlayout-cùng kích thước. – Unoti

2

Ngoài các câu trả lời được chấp nhận:

Tôi đã có một vấn đề tương tự mà tôi cần một vài hình ảnh trong một mạng lưới với độ rộng cột bằng nhau, vì vậy tôi sử dụng một cách bố trí bảng. Nó hoạt động, nhưng khi các hình ảnh được tải không đồng bộ, các cột tương ứng sẽ chiếm toàn bộ chiều rộng cho đến khi tất cả các cột có ít nhất một hình ảnh trong chúng.

Tôi đã giải quyết vấn đề này bằng cách sử dụng giải pháp của Robby Pond, nhưng nó không hoạt động cho hàng cuối cùng, không nhất thiết phải có nhiều hình ảnh như các hàng khác, kéo dài những hình ảnh đó để vừa với các cột giống như trên. Để chống lại điều này, tôi điền các cột trống còn lại của hàng đó với bình thường Xem các đối tượng,

sử dụng các thông số bố trí giống như tất cả những hình ảnh khác:

width = 0, weight = 1. Và đó giải quyết nó!

0

Đoạn bố trí

<TableLayout 
    android:id="@+id/tablelayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

Các mã lập trình đặt thuộc tính bố trí các nút trong bảng:

public void addButtons(View view) { 
    TableLayout tableLayout = (TableLayout) findViewById(R.id.tablelayout); 
    Context context = getApplicationContext(); 
    tableLayout.removeAllViews(); 

    for (int rowIndex = 0; rowIndex < ROWS; rowIndex++) { 
     TableRow row = new TableRow(context); 
     for (int columnIndex = 0; columnIndex < COLUMNS; columnIndex++) { 
      Button btn = new Button(context); 
      LayoutParams buttonParams = new LayoutParams(0, 
        LayoutParams.WRAP_CONTENT, 1f); 
      btn.setLayoutParams(buttonParams); 
      row.addView(btn); 
     } 
     tableLayout.addView(row); 
    } 
} 
4

đẹp ví dụ (có nguồn gốc từ http://androidadvice.blogspot.com/2010/10/tablelayout-columns-equal-width.html)

Tested và làm việc:

<TableRow> 
    <!-- Column 1 --> 
    <TextView 
    android:id="@+id/tbl_txt1" 
    android:layout_width="0dip" 
    android:layout_height="wrap_content" 
    android:background="@color/red" 
    android:textColor="@color/white" 
    android:padding="10dip" 
    android:layout_margin="4dip" 
    android:layout_weight="1" 
    android:text="Column 1" /> 

    <!-- Column 2 --> 
    <TextView 
    android:id="@+id/tbl_txt2" 
    android:layout_width="0dip" 
    android:layout_height="wrap_content" 
    android:background="@color/red" 
    android:textColor="@color/white" 
    android:padding="10dip" 
    android:layout_margin="4dip" 
    android:layout_weight="1" 
    android:text="Column 2" /> 

    <!-- Column 3 --> 
    <TextView 
    android:id="@+id/tbl_txt3" 
    android:layout_width="0dip" 
    android:layout_height="wrap_content" 
    android:background="@color/red" 
    android:textColor="@color/white" 
    android:padding="10dip" 
    android:layout_margin="4dip" 
    android:layout_weight="1" 
    android:text="Column 3" /> 
</TableRow> 

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