【问题标题】:Cannot add Vertical Divider to TableLayout Android无法将垂直分隔线添加到 TableLayout Android
【发布时间】:2017-04-04 04:20:19
【问题描述】:

我想在我的TableLayout 中添加垂直分隔线。

我的TableLayout 看起来像这样:

但我想在每行的两个 textviews 之间添加一条线(分隔线)。我尝试在两个textviews 之间放置一个View,但它会延长行。

这是我上面布局的代码:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/row"
android:layout_gravity="center"
android:showDividers="beginning"
android:orientation="horizontal"
android:stretchColumns="1"
android:background="@drawable/custom_background">

<TableRow>
    <TextView
        android:text="Name"
        android:padding="3dip" />

    <TextView
        android:text="Imran"
        android:gravity="left"
        android:padding="3dip" />
</TableRow>

<View
    android:layout_height="2dip"
    android:background="#FF909090" />

<TableRow>
    <TextView
        android:text="Name"
        android:padding="3dip" />

    <TextView
        android:text="Test"
        android:gravity="left"
        android:padding="3dip" />
</TableRow>

<View
    android:layout_height="2dip"
    android:background="#FF909090" />

<TableRow>
    <TextView
        android:text="Name"
        android:padding="3dip" />

    <TextView
        android:text="Test"
        android:gravity="left"
        android:padding="3dip" />
</TableRow>

我想实现如下布局:

谁能帮我用TableLayout或任何其他方式实现上述布局?

【问题讨论】:

    标签: android xml android-layout tablelayout android-tablelayout


    【解决方案1】:

    我认为这个解决方案要容易得多。

    你的表格布局:

    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_margin="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:divider="@drawable/table_divider"
        android:showDividers="middle"
        android:shrinkColumns="*"
        android:background="@drawable/rounded_corners">
    
        <TableRow
            android:divider="@drawable/table_divider"
            android:showDividers="middle"
            android:weightSum="3">
    
            <TextView
                android:layout_width="0dp"
                android:layout_weight="1"
                android:padding="3dp"
                android:text="Column1"
                android:textStyle="bold" />
    
            <TextView
                android:layout_width="0dp"
                android:layout_weight="1"
                android:padding="3dp"
                android:text="Column2"
                android:textStyle="bold" />
    
            <TextView
                android:layout_width="0dp"
                android:layout_weight="1"
                android:padding="3dp"
                android:text="Column3"
                android:textStyle="bold" />
        </TableRow>
    
        <TableRow
            android:divider="@drawable/table_divider"
            android:showDividers="middle"
            android:weightSum="3">
    
            <TextView
                android:layout_width="0dp"
                android:layout_weight="1"
                android:padding="3dp"
                android:text="Column1" />
    
            <TextView
                android:layout_width="0dp"
                android:layout_weight="1"
                android:padding="3dp"
                android:text="Column2" />
    
            <TextView
                android:layout_width="0dp"
                android:layout_weight="1"
                android:padding="3dp"
                android:text="Column3" />
        </TableRow>
    
    </TableLayout>
    

    您的背景可绘制对象:

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

    <solid android:color="#00000000" />
    <stroke
        android:width="1dp"
        android:color="@android:color/black" />
    
    <corners
        android:bottomLeftRadius="10dp"
        android:bottomRightRadius="10dp"
        android:topLeftRadius="10dp"
        android:topRightRadius="10dp" />
    

    以及分隔线的形状:

    table_divider.xml
    
    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
        <size android:height="1dp" />
        <size android:width="1dp" />
        <solid android:color="@android:color/black" />
    </shape>
    

    结果:

    如果您不需要背景,您可以在 TableLayout 和每个 TableRow 中执行此操作:

    android:showDividers="beginning|middle|end"
    

    没有背景的结果:

    【讨论】:

      【解决方案2】:

      这是主要的 xml 文件。你可以使用

          android:divider="@drawable/vertical_divider"
          android:showDividers="middle"
      

      在线性布局中显示垂直分隔线。我设计了你的布局,我不喜欢表格布局,你可以试试线性布局。

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="@drawable/rounded_corner"
      android:orientation="vertical">
      
      
       <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
           android:orientation="horizontal"
           android:divider="@drawable/vertical_divider"
          android:showDividers="middle">
      
          <TextView
              android:layout_width="0dp"
              android:layout_height="wrap_content"
              android:layout_weight="1"
              android:padding="16dp"
              android:text="Lorem ipsum" />
      
          <TextView
              android:layout_width="0dp"
              android:layout_height="wrap_content"
              android:layout_weight="1"
              android:padding="16dp"
              android:text="Lorem ipsum" />
         </LinearLayout>
      
      <View
          android:layout_width="match_parent"
          android:layout_height="1dp"
          android:background="#FFCCCCCC"></View>
      
        <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:divider="@drawable/vertical_divider"
          android:orientation="horizontal"
          android:showDividers="middle">
      
          <TextView
              android:layout_width="0dp"
              android:layout_height="wrap_content"
              android:layout_weight="1"
              android:padding="16dp"
              android:text="Lorem ipsum" />
      
          <TextView
              android:layout_width="0dp"
              android:layout_height="wrap_content"
              android:layout_weight="1"
              android:padding="16dp"
              android:text="Lorem ipsum" />
         </LinearLayout>
      
      <View
          android:layout_width="match_parent"
          android:layout_height="1dp"
          android:background="#FFCCCCCC"></View>
      
      <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:divider="@drawable/vertical_divider"
          android:orientation="horizontal"
          android:showDividers="middle">
      
          <TextView
              android:layout_width="0dp"
              android:layout_height="wrap_content"
              android:layout_weight="1"
              android:padding="16dp"
              android:text="Lorem ipsum" />
      
          <TextView
              android:layout_width="0dp"
              android:layout_height="wrap_content"
              android:layout_weight="1"
              android:padding="16dp"
              android:text="Lorem ipsum" />
         </LinearLayout>
      
         <View
          android:layout_width="match_parent"
          android:layout_height="1dp"
          android:background="#FFCCCCCC"></View>
      
        </LinearLayout>
      

      这里是代码

      rounded_corner.xml

        <?xml version="1.0" encoding="utf-8"?>
        <shape xmlns:android="http://schemas.android.com/apk/res/android">
      
        <solid android:color="#00000000" />
        <stroke
          android:width="1dp"
          android:color="#bababa" />
      
        <padding
          android:bottom="1dp"
          android:left="1dp"
          android:right="1dp"
          android:top="1dp" />
      
        <corners
          android:bottomLeftRadius="25dip"
          android:bottomRightRadius="25dip"
          android:topLeftRadius="25dip"
          android:topRightRadius="25dip" />
        </shape>
      

      这里是代码

      vertical_divider.xml
      
         <?xml version="1.0" encoding="UTF-8"?>
         <inset xmlns:android="http://schemas.android.com/apk/res/android"
         android:insetBottom="2dp"
         android:insetTop="2dp">
         <shape>
            <size android:width="1dp" />
            <solid android:color="#FFCCCCCC" />
         </shape>
        </inset>
      

      把你的颜色代码放在上面:)

      输出

      【讨论】:

      • 感谢您帮助我,但我需要在第一个 textview 旁边而不是在中间的分隔线。我怎样才能做到这一点?我试过 android:showdividers="beginning" 但它仍然在中间显示垂直分隔线。
      • 亲爱的文本视图权重。试试权重 1.5 和 0.5,
      • 在具有水平方向的内部布局中添加 weightSum 并根据此代码更改文本视图的权重。