【问题标题】:android: help creating tablelayoutandroid:帮助创建表格布局
【发布时间】:2023-08-20 02:33:01
【问题描述】:

我很难理解布局教程。我无法对齐不同行上的列。例如 android:padding="3dip" 中的 3dip 是什么意思。文档说“可用单位有:px(像素)、dp(与密度无关的像素)、sp(基于首选字体大小的缩放像素)、in(英寸)、mm(毫米)。”。

具体来说,我想创建一个上下两行的布局,中间是列表。我希望底行粘在底部。例如,


标题1 |标题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>

【问题讨论】:

    标签: android layout tablelayout


    【解决方案1】:

    TableLayout 并不是您真正需要的。 TableLayout 为您提供类似于 Excel 的东西,其中有行和列。

    另外,dip 与 dp 相同。

    可能的解决方案:

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

    【讨论】:

    • 那我应该切换到LinearLayout吗?如何使底行粘在屏幕的最底部?
    【解决方案2】:

    RelativeLayout 允许您使用属性 layout_alignParentBottom="true" 或 layout_alignParentTop="true" 告诉视图固定在底部或顶部。有关 RelativeLayout 的更多信息,请参阅common layouts

    【讨论】:

      【解决方案3】:

      您的答案效果不佳,我希望人们不要再发布错误的答案。这是您可以使用的一个提示。使用合并标签与父级合并,因为无论如何父级布局很可能处于 FrameLayout 模式。在 Linearlayout 中包裹一个部分(您的前两行),然后最后一行离开将默认为父级。然后使用 android:layout_gravity="bottom" 属性。请参阅layout example 了解更多信息。

      这是我的一个例子,有 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>
      

      【讨论】:

        【解决方案4】:

        另一种方法是将RelativeLayout 与LinearLayout 混合使用。例如,在相对部分中,您使用 android:layout_below="@id/color_font_text" 引用前一个小部件。这将放置第二个小部件,即第一个 TextView 下方的 SeekBar。希望这会有所帮助!

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

        【讨论】: