2015-02-25 2 views
0

Я пытаюсь создать макет для таблицы, которая выглядит следующим образом:Android Каков канонический способ создания макета для табличных данных?

enter image description here

Столбцы фиксированы, а строки могут динамически добавлять/удалять.

Поэтому я попытался использовать TableLayout для разработки «скелета» моего стола.

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

И попытался разработки макета пользовательского TableRow для динамически добавляемых строк

<?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> 

И главная проблема заключается в том, что с помощью RelativeLayout, я не могу пропорционально установить ширину моих полей (С layout_weight поддерживается только на linearlayout).

Я также не думаю, что ширина полей для строк будет синхронизироваться с ширинами столбцов, определенными в TableLayout.

В целом, этот подход просто чувствует себя грязным и очень неправильным.

Каков правильный способ создания таблицы, показанной в примере?

ответ

0

Простым способом создания таблицы, как вы хотите, является использование GridLayout. Таким образом, ширина столбцов адаптируется к содержимому и заголовку, а строки имеют одинаковые ширины столбцов.

Например:

<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> 
+0

@ l46kok Является ли это полезно? – LaurentY

-1

Вы пытались добавить строки программным способом вместо загрузки xml? Это всего лишь идея, но вы можете сделать заголовки в xml, а затем в своем onCreate добавить TextViews с помощью LayoutParams, который вы хотите.

Смежные вопросы