如何在Android中以编程方式交换视图控件?

时间:2012-07-19 23:22:42

标签: java android android-layout android-view android-xml

我有以下XML布局驱动我的UI:

<TableLayout
    android:id="@+id/tableLayout1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:stretchColumns="1"
    android:layout_margin="10dp" >

    <TableRow
        android:id="@+id/tableRow1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Username:" />

        <EditText
            android:id="@+id/txtUsername"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName" >

        </EditText>

    </TableRow>

       <!-- more rows are here -->

</TableLayout>

我想在我的应用的另一部分重复使用此布局,但在一个地方稍微改变一下。我希望将EditText txtUsername更改为TextView,在同一位置和所有内容。所以基本上我在代码中交换TextView的TextView。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

如果这是您需要的唯一更改,我会通过将TextView添加到您的布局(默认为View.GONE)并在适当的位置使用View.setVisibility(View.VISIBLE)和View.setVisibility(View.GONE)来实现。交换它们。

<TableRow
    android:id="@+id/tableRow1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Username:" />

    <EditText
        android:id="@+id/txtUsername"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName" >

    </EditText>
    <TextView
        android:id="@+id/txtUsernameTV"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName" 
        android:visibility="gone">

    </TextView>
</TableRow>

然后在你的java中你可以保留你已经拥有的活动,在新活动中(你想要TextView的地方)做这样的事情:

editTextReference.setVisibility(View.GONE);
textViewReference.setVisibility(View.VISIBLE);

请注意,两个视图的ID需要不同的值。