Android: помощь в создании таблицы - PullRequest
1 голос
/ 20 января 2010

Мне трудно понять учебник по макету. Я не могу выровнять столбцы на разных строках. Например, что означает 3dip в Android: padding = "3dip". В документации сказано: «Доступные единицы измерения: px (пиксели), dp (пиксели, не зависящие от плотности), sp (масштабированные пиксели на основе предпочтительного размера шрифта), дюймы (дюймы), мм (миллиметры)».

В частности, я хочу создать макет с двумя верхними и нижними строками, а середина - списки. И я хочу, чтобы нижний ряд придерживался нижнего. например.,


title1 | название 2 | название 3 |

список 1

список 2

нижняя 1 | дно 2 |

Мой текущий xml выглядит очень некрасиво (без средних списков)

<?xml version="1.0" encoding="utf-8"?>

<TableRow>
    <TextView
         android:layout_width="wrap_content"
          android:gravity="center_horizontal"
        android:text="title 1"
         />
    <TextView
    android:layout_width="wrap_content"
     android:gravity="center_horizontal"
        android:text="title 2"

         />
        <TextView
         android:layout_width="wrap_content"
          android:gravity="center_horizontal"
        android:text="title 3"            
        />
</TableRow>
<View        android:layout_height="2dip"        
android:background="#FF909090" />
   <TableRow>
    <TextView
         android:layout_width="wrap_content"
          android:gravity="center_horizontal"
        android:text="bottom 1"
         />

        <TextView
         android:layout_width="wrap_content"
          android:gravity="center_horizontal"
        android:text="bottom 2"            
        />
</TableRow>

Ответы [ 4 ]

4 голосов
/ 20 января 2010

TableLayout на самом деле не то, что вам нужно для этого. TableLayout дает вам что-то вроде Excel, где у вас есть строки и столбцы.

Кроме того, провал такой же, как дп.

Возможное решение:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_height="wrap_content"
        android:id="@+id/TopRow"
        android:layout_width="fill_parent"
        android:orientation="horizontal">

        <TextView
            android:text="@+id/TextView01"
            android:id="@+id/TextView01"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:layout_weight="1" />
        <TextView
            android:text="@+id/TextView01"
            android:id="@+id/TextView01"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:layout_weight="1" />
        <TextView
            android:text="@+id/TextView01"
            android:id="@+id/TextView01"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:layout_weight="1" />

    </LinearLayout>
    <LinearLayout
        android:id="@+id/Middle"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        android:layout_weight="1"
        android:orientation="vertical">

        <ListView
            android:id="@+id/ListView01"
            android:layout_width="fill_parent"
            android:layout_weight="1"
            android:layout_height="fill_parent" />
        <ListView
            android:id="@+id/ListView02"
            android:layout_height="fill_parent"
            android:layout_width="fill_parent"
            android:layout_weight="1" />

    </LinearLayout>
    <LinearLayout
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:orientation="horizontal"
        android:id="@+id/BottomRow">

        <TextView
            android:text="@+id/TextView01"
            android:id="@+id/TextView01"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:layout_weight="1" />
        <TextView
            android:text="@+id/TextView01"
            android:id="@+id/TextView01"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:layout_weight="1" />

    </LinearLayout>
</LinearLayout>
1 голос
/ 20 января 2010

RelativeLayout позволяет указывать представлениям придерживаться низа или верха с атрибутами layout_alignParentBottom = "true" или layout_alignParentTop = "true". См. общие макеты для получения дополнительной информации о RelativeLayout.

0 голосов
/ 03 декабря 2010

Другой способ сделать это - использовать RelativeLayout, смешанный с LinearLayout. В относительной части вы ссылаетесь на предыдущий виджет, используя, например, android: layout_below = "@ id / color_font_text". Это положит второй виджет, SeekBar ниже первого TextView. Надеюсь, это поможет!

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="fill_parent" 
            android:layout_height="fill_parent" 
            xmlns:android="http://schemas.android.com/apk/res/android">
  <TextView 
      android:id="@+id/color_font_text" 
      android:text="@string/color_font_text" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:textSize="20px" 
      android:textColor="#FF999999" 
      android:textStyle="bold" 
      android:gravity="center_horizontal"></TextView>
  <SeekBar
       android:id="@+id/seekbar_font"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_margin="10px"
       android:layout_below="@id/color_font_text"
       android:max="100"
       android:progress="50"></SeekBar>
  <TextView 
      android:id="@+id/color_background" 
      android:text="@string/color_background" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/seekbar_font"
      android:textSize="20px" 
      android:textColor="#FF999999" 
      android:textStyle="bold" 
      android:gravity="center_horizontal"></TextView>
  <SeekBar
      android:id="@+id/seekbar_back"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_below="@id/color_background"
      android:max="100"
      android:progress="50" 
      android:layout_margin="10px"></SeekBar>
  <TextView  
    android:id="@+id/color_example" 
    android:text="CURRENT COLOR"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:layout_below="@id/seekbar_back"
    android:textSize="20px" 
    android:gravity="center_horizontal|center_horizontal"
    android:layout_centerInParent="true"/>

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:gravity="center">
    <Button 
        android:text="@string/color_button_save" 
        android:id="@+id/color_button_save" 
        android:layout_weight="1"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" />
    <Button 
        android:text="@string/color_button_cancel" 
        android:id="@+id/color_button_cancel"
        android:layout_weight="1" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" />

</LinearLayout>
 </RelativeLayout>
0 голосов
/ 03 декабря 2010

Ваши ответы не работают так хорошо, я бы хотел, чтобы люди перестали публиковать неправильные ответы. Вот один совет, который вы можете использовать. Используйте тег merge для слияния с родителем, так как в любом случае родительский макет, скорее всего, находится в режиме FrameLayout. Оберните одну часть в Linearlayout (ваши первые две строки), после чего последний оставленный ряд по умолчанию будет родительским. Затем используйте атрибут android: layout_gravity = "bottom". См. пример макета для получения дополнительной информации.

Вот мой пример с 3-мя текстовыми представлениями и 2-мя поисковыми панелями. Я хотел, чтобы последний текст располагался внизу.

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout 
    android:id="@+id/LinearLayout01" 
    android:layout_height="wrap_content" 
    android:layout_gravity="top" 
    android:layout_width="fill_parent" 
    android:orientation="vertical">
  <TextView 
      android:layout_height="wrap_content" 
      android:autoText="false" 
      android:text="@string/color_font_text" 
      android:id="@+id/color_font_text" 
      android:layout_width="fill_parent" 
      android:textSize="20px" 
      android:textColor="#FF999999" 
      android:textStyle="bold" 
      android:gravity="center_horizontal"></TextView>
  <SeekBar
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_margin="10px"
       android:id="@+id/seekbar_font"
       android:max="100"
       android:progress="50"></SeekBar>
  <TextView 
      android:layout_height="wrap_content" 
      android:autoText="false" 
      android:text="@string/color_background" 
      android:id="@+id/color_background" 
      android:layout_width="fill_parent" 
      android:textSize="20px" 
      android:textColor="#FF999999" 
      android:textStyle="bold" 
      android:gravity="center_horizontal"></TextView>
  <SeekBar
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:id="@+id/seekbar_back"
       android:max="100"
       android:progress="50" android:layout_margin="10px"></SeekBar>
</LinearLayout>     
<TextView  
    android:id="@+id/color_example" 
    android:text="CURRENT COLOR"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:textSize="20px" 
    android:layout_gravity="bottom" 
    android:gravity="center_horizontal"/>

  </merge>
...