【问题标题】:How can I get an Android TableLayout to fill the parent in landscape mode?如何让 Android TableLayout 以横向模式填充父级?
【发布时间】:2010-12-30 05:32:22
【问题描述】:

我在我的应用程序中使用 TableLayout。它包含四个 TableRows,每个 TableRows 包含四个 ImageView。我想要的行为是缩放布局以适应最短的尺寸。

它在纵向模式下工作正常,但在横向模式下就惨败了。

documentation 看来,这是因为 TableRow 的 layout_height 始终设置为 WRAP_CONTENT。虽然我可以设置各个视图的尺寸,但如果我将视图 layout_height 设置为 FILL_PARENT,则 TableLayout 根本不会呈现。

我觉得我缺少一些简单的东西。有没有办法让带有 TableRows 的 TableLayout 缩放以适应横向模式下的高度?

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);
    }
}
}

【问题讨论】:

标签: android tablelayout


【解决方案1】:

我在这里尝试了接受的解决方案,但没有奏效。工作如下:

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);

【讨论】:

    【解决方案2】:

    我确实想出了如何做到这一点。基本上,没有按我想要的方式工作的部分是 TableRows。当我更改为横向时,前两个 TableRows 根本没有调整大小,第三个正在消耗剩余的空间。第四行根本没有显示。

    我发现我需要将 TableRows 的 layout_weight 设置为相等的值。但是,在运行时没有办法做到这一点,所以我构建了以下布局文件,我称之为 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>
    

    然后我使用 LayoutInflater 在运行时使用我想要的属性构建行:

        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);
        }
    

    现在 TableRows 可以在旋转时正确调整大小。我将 ImageViews 更改为 ImageButtons,因为我决定添加一些 onClick 行为,并且我正在通过单独的 xml 文件构建这些按钮,但我认为这些细节与调整大小问题无关。

    【讨论】:

    • android:layout_weight="1"添加到表格标题行的每一列解决了我的问题,很好
    【解决方案3】:

    将您的 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="160dp"
            android:shrinkColumns="*">
    </TableLayout>
    

    无论方向如何,它都应该占据整个屏幕的高度。见density independent pixels

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 2015-07-08
      相关资源
      最近更新 更多