如何使 TableLayout 响应

How to make TableLayout Responsive

目前我正在开发一些 android 应用程序,其中包含 list。 我在移动(手机)设备上做了一个。 我想让它 responsive 在平板电脑 (7"-10") 中显示。所以 headercolumn 看起来与移动显示相同。

这是 5" 和 7" 显示器之间的差异:

这是我当前的 xml 代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:tag="reqtag"
>
<TableLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:showDividers="beginning|end"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="Date"
            android:id="@+id/tvClaimDateReimbursementRequest"

            android:layout_marginRight="50dp"
            android:textSize="12dp"
            android:width="100dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="Type"
            android:textSize="12dp"
            android:layout_marginLeft="50dp"
            android:layout_marginRight="50dp"
            android:id="@+id/tvTypeRequestReimbursement"
            android:width="80dp" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="Amount"
            android:textSize="10dp"
            android:layout_marginLeft="50dp"
            android:layout_marginRight="50dp"
            android:width="100dp"
            android:id="@+id/tvAmountReimbursementRequest" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="Status"
            android:textSize="12dp"
            android:layout_marginLeft="50dp"
            android:layout_marginRight="50dp"
            android:id="@+id/tvStatusReimbursementRequest" />
    </TableRow>
</TableLayout>

我看过这里的文档https://developer.android.com/guide/practices/screens_support.html

但我还是不明白, 做这样的事情有什么最佳实践吗?

谢谢

你可以尝试设置

android:layout_width="0dp"
android:layout_weight="1"

对于每个 header TextView,因为 TableRowLinearLayout

但我认为 TableView 不是最好的方法。如果您描述了您想要实现的目标,我们可以想出更好的方法。

为您的表格行布局分配一个权重和。然后将该权重平均分配给所有文本视图。喜欢:

<TableRow
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:weight_sum="1"  >

<TextView
            android:layout_width="0dp"
            android:layout_weight=".2" // for five texts .2 for each
            android:layout_height="wrap_content" 
            ......  />

在您的 table 行中尝试此代码 水平排列其子项的布局。 TableRow 应始终用作 TableLayout 的子项。如果 TableRow 的父级不是 TableLayout,则 TableRow 将表现为水平 LinearLayout。

TableRow 的子项不需要在 XML 文件中指定 layout_width 和 layout_height 属性。 TableRow 始终强制这些值分别为 MATCH_PARENT 和 WRAP_CONTENT.

文本应使用 sp,视图应使用 dp。所以应该是 android:textSize="12sp"

而不是 android:textSizes="12dp"

查看此处了解更多详情:https://developer.android.com/guide/topics/resources/more-resources.html#Dimension