2009-12-27 20 views
7

Tôi đang sử dụng một TableLayout trong ứng dụng của mình. Nó chứa bốn TableRows mỗi chứa bốn ImageViews. Hành vi tôi muốn là chia tỷ lệ bố cục cho vừa với kích thước ngắn nhất.Làm thế nào tôi có thể nhận được một Android TableLayout để điền vào các phụ huynh trong chế độ phong cảnh?

Chế độ này hoạt động tốt ở chế độ dọc nhưng không hoạt động sai ở chế độ ngang.

Từ documentation có vẻ như vậy là do bố cục TableRow luôn được đặt thành WRAP_CONTENT. Mặc dù tôi có thể đặt kích thước của từng Chế độ xem riêng lẻ, nhưng TableLayout sẽ không hiển thị nếu tôi đặt Chế độ xem layout_height thành FILL_PARENT.

Tôi cảm thấy có điều gì đó đơn giản mà tôi đang thiếu. Có cách nào để có được TableLayout với TableRows để mở rộng để phù hợp với chiều cao trong chế độ phong cảnh?

Layout XML:

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/table" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:shrinkColumns="*"> 
</TableLayout> 

Java:

public class Example extends Activity { 

private TableLayout mTable; 
private int[] mDrawableIds = { R.drawable.draw01, R.drawable.draw02, R.drawable.draw03, R.drawable.draw04, R.drawable.draw05, R.drawable.draw06, R.drawable.draw07, R.drawable.draw08, R.drawable.draw09, R.drawable.draw10, R.drawable.draw11, R.drawable.draw12, R.drawable.draw13, R.drawable.draw14, R.drawable.draw15, R.drawable.draw16 }; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    mTable = (TableLayout)findViewById(R.id.table); 
    for (int j=0; j<4; j++) { 
     TableRow tr = new TableRow(this); 
     tr.setLayoutParams(new ViewGroup.LayoutParams( LayoutParams.FILL_PARENT, 
       LayoutParams.WRAP_CONTENT)); 
      for (int i=0; i<4; i++) { 
       ImageView iv = new ImageView(this); 
       iv.setImageResource(mDrawableIds[j*4+i]); 
       iv.setScaleType(ImageView.ScaleType.FIT_CENTER); 
       iv.setAdjustViewBounds(true); 
       tr.addView(iv); 
      } 
     mTable.addView(tr); 
    } 
} 
} 
+0

GridView có hoạt động không cho trường hợp sử dụng của bạn không? Hướng dẫn GridView tại đây: http://developer.android.com/guide/tutorials/views/hello-gridview.html –

+0

GridView dường như muốn cuộn thay vì thay đổi kích thước ImageViews thành bố cục ngang. Có lẽ nếu tôi tạo tài nguyên hình ảnh nhỏ hơn có thể hoạt động. Tôi đã hy vọng tránh thay đổi kích thước hình ảnh. –

Trả lời

4

Tôi đã tìm ra cách thực hiện việc này. Về cơ bản, phần không hoạt động theo cách tôi muốn là TableRows. Khi tôi thay đổi thành cảnh quan, hai TableRows đầu tiên không được thay đổi kích thước và thứ ba đã tiêu thụ phần còn lại của không gian. Hàng thứ tư không hiển thị.

Tôi đã tìm ra rằng tôi cần thiết đặt layout_weight của TableRows thành các giá trị bằng nhau. Nhưng, không có phương pháp để làm điều đó trong thời gian chạy, vì vậy tôi đã xây dựng bố trí tập tin sau đây, mà tôi gọi là row.xml:

<?xml version="1.0" encoding="utf-8"?> 
<TableRow xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/trow" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_weight="1"> 
</TableRow> 

Sau đó, tôi sử dụng một LayoutInflater để xây dựng hàng khi chạy với các thuộc tính tôi muốn :

mTable = (TableLayout)findViewById(R.id.table); 
    LayoutInflater inflater = getLayoutInflater(); 

    for (int j=0; j<4; j++) { 
     View row = inflater.inflate(R.layout.row, mTable,false); 
     TableRow tr = (TableRow)row.findViewById(R.id.trow); 
      for (int i=0; i<4; i++) { 
       View image = inflater.inflate(R.layout.image, tr, false); 
       ImageButton ib = (ImageButton)image.findViewById(R.id.image); 
       ib.setAdjustViewBounds(true); 
       ib.setImageResource(mCardIds[j*4+i]); 
       tr.addView(ib); 
      } 
     mTable.addView(tr); 
    } 

Bây giờ các TableRows được thay đổi kích thước đúng cách khi xoay. Tôi đã thay đổi ImageViews thành ImageButton vì tôi quyết định thêm một số hành vi onClick và tôi đang tạo các nút đó thông qua một tệp xml riêng biệt, nhưng tôi không nghĩ rằng các chi tiết đó có liên quan đến vấn đề thay đổi kích thước.

+0

thêm 'android: layout_weight =" 1 "' vào mỗi cột trong bảng tiêu đề hàng đã giải quyết được vấn đề của tôi, tốt đẹp – knownUnknown

4

Thay đổi layout XML của bạn để:

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/table" 
     android:layout_width="fill_parent" 
     android:layout_height="160dp" 
     android:shrinkColumns="*"> 
</TableLayout> 

Điều đó sẽ làm cho nó mất chiều cao toàn bộ màn hình của bất kể định hướng. Xem density independent pixels

0

Tôi đã thử giải pháp được chấp nhận tại đây nhưng không hoạt động. Những gì đã làm như sau:

TableRow tr = new TableRow(this); 
TableLayout.LayoutParams pRowTop = new TableLayout.LayoutParams(
       TableLayout.LayoutParams.MATCH_PARENT, 
       TableLayout.LayoutParams.WRAP_CONTENT); 
pRowTop.weight = 1; 
mTable.addView(tr, pRowTop); 
Các vấn đề liên quan