将视图与RelativeLayout外部的视图对齐

时间:2015-03-12 11:40:03

标签: android android-layout

我正在Android中使用RelativeLayout设计一个表,并以编程方式添加条目。结果令我高兴:

Table using RelativeLayout

布局代码是

<RelativeLayout
    android:id="@+id/table_relativelayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
  <TextView
      android:id="@+id/column1_header"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_alignParentLeft="true"
      android:layout_alignParentTop="true"
      android:text="@string/column1_header"
      style="?android:attr/listSeparatorTextViewStyle"
      android:layout_weight="1.0"
      />
  <TextView
      android:id="@+id/column2_header"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerHorizontal="true"
      android:layout_alignBaseline="@id/column1_header"
      android:text="@string/column1_header"
      android:textSize="14sp"
      android:textStyle="bold"
      android:textAllCaps="true"
      android:textColor="@color/textColor"
      />
  <TextView
      android:id="@+id/column3_header"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentRight="true"
      android:layout_alignBaseline="@id/column1_header"
      android:text="@string/column3_header"
      android:textSize="14sp"
      android:textAllCaps="true"
      android:textStyle="bold"
      android:paddingRight="8dip"
      />

  <TextView
      android:id="@+id/example_column1_entry"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignLeft="@id/column1_header"
      android:text=""
      android:paddingLeft="8dip"
      android:visibility="gone"
      />
  <TextView
      android:id="@+id/example_column2_entry"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignRight="@id/column2_header"
      android:text=""
      android:visibility="gone"
      />
  <TextView
      android:id="@+id/example_column3_entry"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignRight="@id/column3_header"
      android:paddingRight="8dip"
      android:text=""
      android:visibility="gone"
      />

</RelativeLayout>

但是,随着更多条目的添加,滚动变得必要。所以我将整个事情包裹在ScrollView(按this answer

<ScrollView
  android:id="@+id/table_scrollview"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:scrollbars="vertical"
  android:fillViewport="true"
  >
    ...
</ScrollView>

这当然会导致如果我向下滚动隐藏标题行。我更倾向于在ScrollView之外使用它,但后来我不知道如何将条目与标题对齐。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

尝试这样的事情:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
   <LinearLayout 
       android:id="@+id/header"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="horizontal"
       android:layout_alignParentTop="true">
    <TextView
      android:id="@+id/column1_header"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_alignParentLeft="true"
      android:layout_alignParentTop="true"
      android:text="@string/column1_header"
      style="?android:attr/listSeparatorTextViewStyle"
      android:layout_weight="1.0"
      />
  <TextView
      android:id="@+id/column2_header"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerHorizontal="true"
      android:layout_alignBaseline="@id/column1_header"
      android:text="@string/column1_header"
      android:textSize="14sp"
      android:textStyle="bold"
      android:textAllCaps="true"
      android:textColor="@color/textColor"
      />
  <TextView
      android:id="@+id/column3_header"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentRight="true"
      android:layout_alignBaseline="@id/column1_header"
      android:text="@string/column3_header"
      android:textSize="14sp"
      android:textAllCaps="true"
      android:textStyle="bold"
      android:paddingRight="8dip"
      />
</LinearLayout>
<ScrollView 
    android:layout_below="@id/header"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

   <LinearLayout
       android:id="@+id/scroll_view_container"
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"> 

       <rows>

    </LinearLayout>

</ScrollView>
<RelativeLayout>

答案 1 :(得分:0)

你不想用xml做这件事。 因为你根本无法在relativeLayout中引用视图 从外面反之亦然,调整事物。 我必须处理你的问题,因为我实现了一个in size selfadjusting tableView。诀窍是将一行的所有textViews添加到ViewGroup(LinearLayout,例如,因为易于使用addView)并计算正手中每个行标题的宽度。比设置viewGroups programmaticaly的大小。 这是关键。这样,您可以稍后轻松更改行标题并保持灵活性。此外,您不限于固定大小的列。

  1. 计算标题的宽度
  2. 设置(例如)每行的LinearLayouts的大小
  3. 将所有TextView添加到LinearLayouts
  4. 这应该有希望帮助你。如果您发现自己处于stackoverflow,请回答所有即将出现的计算大小等问题。

    Greets,Steve。

答案 2 :(得分:0)

好的,我找到了一个解决方案:我在ScrollView之外有三个标题TextViews,正如几个评论者所建议的那样,以及另外三个#34;标题&#34;在ScrollViews中具有相同参数和android:visibility="invisible"的TextView。那些不可见的TextView将用于对齐可见条目。

感谢您的回答!