访问包含xml布局的视图

时间:2012-04-10 07:34:21

标签: android relativelayout

我需要访问另一个b.xml布局中包含的a.xml布局中的视图。 例如, 这是一个文件夹

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <Button
            android:id="@+id/xyz"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="XYZ" />
</RelativeLayout>

并且,在b.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <include
        android:id="@+id/a_layout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        layout="@layout/a" />

    <TextView
        android:id="@+id/label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/xyz"
        android:text="Show me below xyz" />
</RelativeLayout>

我必须在xml代码中执行此操作,因为如果我在Java中执行它必须在setContentView()之后,然后设置TextView'label'的LayoutParams将不会生效。

我想,每个人都明白我要问的是什么。等待好的回复。

谢谢大家。

右边的图像是我想要实现的,剩下的就是我使用当前代码获得的内容。

This is what I am getting with the current xml code This is what I am trying to do

2 个答案:

答案 0 :(得分:3)

在b.xml中,您应该更正:

android:layout_below="@id/xyz"

android:layout_below="@id/a_layout"

然后你可以在你的代码中使用它(这里我把它放在onCreate中):

setContentView(R.layout.b);    
((Button)findViewById(R.id.xyz)).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            ((TextView)findViewById(R.id.label)).setText("clicked on XYZ button");
        }
    });

答案 1 :(得分:0)

问题不在于访问所包含布局的View,而在于您无法实现此布局“重叠”。让我解释一下:如果您在a.xml按钮下方添加更多观看次数,然后尝试在按钮下方b.xml放置一些视图,那么它会从b.xml创建视图来自a.xml的重叠视图,但这尚未在Android中实现(但是?)。所以,你唯一能做的就是把android:layout_below="@id/a_layout"作为@HoàngToản建议。

P.S。您可以使用此a + b布局组合观察到相同的行为:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <Button
            android:id="@+id/xyz"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="XYZ" />
    </RelativeLayout>

    <TextView
        android:id="@+id/label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/xyz"
        android:text="Show me below xyz" />
</RelativeLayout>