基于View的Android RelativeLayout对齐以编程方式添加

时间:2013-03-14 22:51:09

标签: android android-layout relativelayout

我以编程方式创建了一个名为DataTable的TableLayout(类似于Create TableLayout programmatically)。现在我需要以编程方式将表添加到RelativeLayout。我尝试以下方法:

DataTable dataTable = new DataTable(getApplicationContext(), data);
RelativeLayout rootLayout = (RelativeLayout) findViewById(R.id.rel_view);
rootLayout.addView(dataTable);

dataTable显示但是对齐混乱了。我现在的问题是设置与dataTable相关的其他组件。

下面我展示了我想要的结果。除此之外,my_table是dataTable应该去的地方。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rel_view"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MyViewActivity" >

    <TableLayout
        android:id="@+id/my_table"
        android:layout_alignParentTop="true" />

    <Spinner
    android:id="@+id/my_spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/my_table" />

    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/my_table"
    android:layout_toRightOf="@id/my_spinner"
    android:text="@string/button_mine"
    android:onClick="buttonPushed" />

</RelativeLayout>

一种想法是基本上按照我的方式保持xml布局,然后以某种方式用dataTable替换my_table,保留idlayout_alignParentTop字段。我不知道怎么做。

另一种想法是使用

RelativeLayout.LayoutParams layout = new RelativeLayout.LayoutParams(LayoutParams.blahblah)

但我无法弄清楚如何设置路线。此外,其他视图也没有id与之相关。

如果以上不清楚,我的主要问题是:在RelativeLayout中,如何将xml硬编码元素(Button和Spinner)与编程添加的元素(TableLayout)对齐)?

1 个答案:

答案 0 :(得分:0)

您可以在布局中添加一个额外的项目(ViewGroupLinearLayout),作为动态创建的View的容器。将SpinnerButton与此额外项目对齐。您可以将其添加到容器中,而不是将视图直接添加到布局的根视图中。它应始终保持您在xml布局文件中设置的对齐方式。例如,此布局应始终将DataTable保持在Spinner

之下
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rel_view"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MyViewActivity" >

    <TableLayout
        android:id="@+id/my_table"
        android:layout_alignParentTop="true" />

    <Spinner
    android:id="@+id/my_spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/my_table" />

    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/my_table"
    android:layout_toRightOf="@id/my_spinner"
    android:text="@string/button_mine"
    android:onClick="buttonPushed" />

    <LinearLayout
        android:id="@+id/my_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:layout_below="@id/my_spinner"/>

</RelativeLayout>