新手:设置内容视图,由两部分组成

时间:2012-03-05 09:39:56

标签: android android-layout android-2.1-eclair

我正在开发Android 2.1应用程序。

我定义了LinearLayout

public class MyTopBar extends LinearLayout {
   ...
}

然后,我有一个布局xml文件(content.xml):

<LinearLayout>
    ...
</LienarLayout>

我有RootActivity.java,我想将MyTopBar设置为此RootActivity中的内容。

然后我的MyActivity扩展了RootActivity

public class MyActivity extends RootActivity{
       //set xml layout as content here    
}

我想将content.xml设置为MyActivity的内容。

作为一个整体,我想使用上述方法来实现MyTopBar应始终位于屏幕上RootActivity的其他活动的内容低于 MyTopBar。如何实现这个??

2 个答案:

答案 0 :(得分:1)

1您可以将自定义LinearLayout直接添加到MyActivity类的xml布局中,如下所示:

<LinearLayout>
    <com.full.package.MyTopBar 
       attributes here like on any other xml views
    />
    ...
</LinearLayout>

或者您可以使用include标记在自定义视图中包含布局:

<LinearLayout>
    <include layout="@layout/xml_file_containing_mytopbar"
    />
    ...
</LinearLayout>

2使用:

setContentView(R.layout.other_content);

答案 1 :(得分:0)

TopBar的布局空置,并使用layout.addView(topbarObject);在其中添加您的Topbar 关于你的第二个问题,就我所知,setContentView只能被调用一次。但是,您可以使用View.inflate(other_content.xml)对这两个xml文件进行充气,并在需要时添加到父xml布局中。您可以在父布局上removeView()使用新布局文件addView()

编辑: 对于这两个问题的解决方案,您可以拥有父布局,例如。如下:

//Omitting the obvious tags
//parent.xml
<RelativeLayout
    android:id="@+id/parentLayout">
    <RelativeLayout
        android:id="@+id/topLayout">
    </RelativeLayout>
    <RelativeLayout
        android:id="@+id/contentLayout">
    </RelativeLayout>
</RelativeLayout>

现在在您的代码中将父布局设置为内容视图,创建TopBar布局的对象并将其添加到topLayout。

setContentView(R.layout.parent);
MyTopBar topBar=new MyTopBar(this);
RelativeLayout toplayout=(RelativeLayout)findViewByid(R.id.topLayout);
topLayout.addView(topBar); //or you can directly add it to the parentLayout, but it won't work for the first question. So better stick to it.

现在膨胀所需的xml布局。并将其添加到contentLayout。

RelativeLayout layout=(RelativeLayout)View.inflate(R.layout.content,null);
contentLayout.addView(layout);//Assuming you've done the findViewById on this.

当您需要显示其他内容xml时,只需调用以下代码即可。

contentLayout.removeAllView();
RelativeLayout layout2=(RelativeLayout)View.inflate(R.layout.other_content,null);
contentLayout.addView(layout2);