Android 创建表格数据布局的规范方法是什么?
Android what is the canonical way of creating a layout for tabular data?
我正在尝试为 table 设计如下所示的布局:
列是固定的,行可以是动态的added/removed。
所以我尝试使用 TableLayout 来设计 table 的 "skeleton"。
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableLayout
android:id="@+id/tblSales"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:shrinkColumns="*"
android:stretchColumns="*">
<TableRow
android:id="@+id/tblSalesCol"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:text="Inventory Info"
android:textSize="20sp"
android:layout_width="120dp"
/>
<TextView
android:text="Sold Price"
android:textSize="20sp"
android:layout_width="40dp"
/>
<TextView
android:text="Sold Qty"
android:textSize="20sp"
android:layout_width="5dp"
/>
</TableRow>
<View style="@style/Divider"/>
</TableLayout>
</ScrollView>
并尝试为动态添加的行设计自定义table行布局
<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:id="@+id/tblrowSales_inv_name"
android:textStyle="bold"
android:textSize="15sp"
android:textColor="#000000"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_height="30dp"
android:layout_width="200dp"/>
<TextView
android:id="@+id/tblrowSales_detail"
android:textStyle="bold"
android:textColor="#000000"
android:layout_height="20dp"
android:layout_width="200dp"
android:layout_below="@id/tblrowSales_inv_name"
/>
<TextView
android:id="@+id/tblrowSales_sold_price"
android:textStyle="normal"
android:textColor="#000000"
android:layout_height="50dp"
android:layout_width="100dp"
android:layout_toRightOf="@id/tblrowSales_detail"/>
<TextView
android:id="@+id/tblrowSales_sold_qty"
android:textStyle="normal"
android:textColor="#000000"
android:layout_height="50dp"
android:layout_width="50dp"
android:layout_toRightOf="@id/tblrowSales_sold_price"/>
</RelativeLayout>
</TableRow>
主要问题是使用相对布局,我无法按比例设置字段的宽度(因为 layout_weight 仅在线性布局上受支持)。
我也不认为行字段的宽度会与 TableLayout 中定义的列宽同步。
总而言之,这种方法感觉很脏而且非常错误。
创建示例中显示的 table 的正确方法是什么?
您是否尝试过以编程方式添加行,而不是加载 xml?这只是一个想法,但您可以在 xml 中制作标题,然后在您的 onCreate 中添加带有您想要的 LayoutParams 的 TextViews。
根据需要创建 table 的简单方法是使用 GridLayout。以这种方式,列宽适应于内容和 header 并且行具有相同的列宽。
例如:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<GridLayout
android:id="@+id/tblSales"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:columnCount="3"
android:padding="10dp" >
<TextView
android:text="Inventory Info"
android:textSize="20sp" />
<TextView
android:text="Sold Price"
android:textSize="20sp" />
<TextView
android:text="Sold Qty"
android:textSize="20sp" />
<TextView
android:id="@+id/tblrowSales_inv_name"
android:layout_width="200dp"
android:layout_height="30dp"
android:text="BackPAck"
android:textColor="#000000"
android:textSize="15sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tblrowSales_sold_price"
android:layout_gravity="center"
android:layout_rowSpan="2"
android:text="33.50$"
android:textColor="#000000"
android:textStyle="normal" />
<TextView
android:id="@+id/tblrowSales_sold_qty"
android:layout_gravity="center"
android:layout_rowSpan="2"
android:text="1"
android:textColor="#000000"
android:textStyle="normal" />
<TextView
android:id="@+id/tblrowSales_detail"
android:layout_width="200dp"
android:layout_height="20dp"
android:text="Sales Regular"
android:textColor="#000000"
android:textStyle="bold" />
</GridLayout>
</ScrollView>
我正在尝试为 table 设计如下所示的布局:
列是固定的,行可以是动态的added/removed。
所以我尝试使用 TableLayout 来设计 table 的 "skeleton"。
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableLayout
android:id="@+id/tblSales"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:shrinkColumns="*"
android:stretchColumns="*">
<TableRow
android:id="@+id/tblSalesCol"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:text="Inventory Info"
android:textSize="20sp"
android:layout_width="120dp"
/>
<TextView
android:text="Sold Price"
android:textSize="20sp"
android:layout_width="40dp"
/>
<TextView
android:text="Sold Qty"
android:textSize="20sp"
android:layout_width="5dp"
/>
</TableRow>
<View style="@style/Divider"/>
</TableLayout>
</ScrollView>
并尝试为动态添加的行设计自定义table行布局
<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:id="@+id/tblrowSales_inv_name"
android:textStyle="bold"
android:textSize="15sp"
android:textColor="#000000"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_height="30dp"
android:layout_width="200dp"/>
<TextView
android:id="@+id/tblrowSales_detail"
android:textStyle="bold"
android:textColor="#000000"
android:layout_height="20dp"
android:layout_width="200dp"
android:layout_below="@id/tblrowSales_inv_name"
/>
<TextView
android:id="@+id/tblrowSales_sold_price"
android:textStyle="normal"
android:textColor="#000000"
android:layout_height="50dp"
android:layout_width="100dp"
android:layout_toRightOf="@id/tblrowSales_detail"/>
<TextView
android:id="@+id/tblrowSales_sold_qty"
android:textStyle="normal"
android:textColor="#000000"
android:layout_height="50dp"
android:layout_width="50dp"
android:layout_toRightOf="@id/tblrowSales_sold_price"/>
</RelativeLayout>
</TableRow>
主要问题是使用相对布局,我无法按比例设置字段的宽度(因为 layout_weight 仅在线性布局上受支持)。
我也不认为行字段的宽度会与 TableLayout 中定义的列宽同步。
总而言之,这种方法感觉很脏而且非常错误。
创建示例中显示的 table 的正确方法是什么?
您是否尝试过以编程方式添加行,而不是加载 xml?这只是一个想法,但您可以在 xml 中制作标题,然后在您的 onCreate 中添加带有您想要的 LayoutParams 的 TextViews。
根据需要创建 table 的简单方法是使用 GridLayout。以这种方式,列宽适应于内容和 header 并且行具有相同的列宽。
例如:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<GridLayout
android:id="@+id/tblSales"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:columnCount="3"
android:padding="10dp" >
<TextView
android:text="Inventory Info"
android:textSize="20sp" />
<TextView
android:text="Sold Price"
android:textSize="20sp" />
<TextView
android:text="Sold Qty"
android:textSize="20sp" />
<TextView
android:id="@+id/tblrowSales_inv_name"
android:layout_width="200dp"
android:layout_height="30dp"
android:text="BackPAck"
android:textColor="#000000"
android:textSize="15sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tblrowSales_sold_price"
android:layout_gravity="center"
android:layout_rowSpan="2"
android:text="33.50$"
android:textColor="#000000"
android:textStyle="normal" />
<TextView
android:id="@+id/tblrowSales_sold_qty"
android:layout_gravity="center"
android:layout_rowSpan="2"
android:text="1"
android:textColor="#000000"
android:textStyle="normal" />
<TextView
android:id="@+id/tblrowSales_detail"
android:layout_width="200dp"
android:layout_height="20dp"
android:text="Sales Regular"
android:textColor="#000000"
android:textStyle="bold" />
</GridLayout>
</ScrollView>