2布局1活动android
问题描述:
我在我的应用程序中有一个导航栏,事情是我想让导航栏在所有活动中都可用。我想我必须设置contentView两次,但这当然不起作用。2布局1活动android
我一直在看,但我没有得到它的工作。我有一个超类,我可以从我的超类设置第二个布局吗?
答
您应该通过其他布局的<include>
标签包含导航栏。设置内容布局两次将不起作用,因为Android基本上始终使用用户最后告诉的回调。因此,
setContentLayout(R.layout.nav);
setContentLayout(R.layout.main);
将导致只使用主布局。
看看this article,它给出了使用include标签的例子。
答
您可以扩展标准活动(Activity,ListActivity等,如果您使用其他),并将它们用作包含nav_bar的基础。
例如:
定义与nabar布局像这样
<LinearLayout
...
android:orientation="vertical"
>
<YourNavBarComponent
...
/>
<FrameLayout
android:id="@+id/nav_content"
...
>
// Leave this empty for activity content
</FrameLayout>
</LinearLayout>
这将是你的基地布局包含在nav_content帧中的所有其他布局。 接下来,创建一个基类的活动,并执行以下操作:
public abstract class NavActivity extends Activity {
protected LinearLayout fullLayout;
protected FrameLayout navContent;
@Override
public void setContentView(final int layoutResID) {
fullLayout= (LinearLayout) getLayoutInflater().inflate(R.layout.nav_layout, null); // Your base layout here
navContent= (FrameLayout) fullLayout.findViewById(R.id.nav_content);
getLayoutInflater().inflate(layoutResID, navContent, true); // Setting the content of layout your provided in the nav_content frame
setContentView(fullLayout);
// here you can get your navigation buttons and define how they should behave and what must they do, so you won't be needing to repeat it in every activity class
}
}
而现在,当你创建一个新的活动,你需要一个导航栏,只是延长NavActivity代替。并且您的导航栏将被放置在您需要的位置,而不会在每个布局中一遍又一遍地重复它,并且污染布局(更不用说重复一个代码来控制每个活动类中的导航)。
你的意思是我必须在每个布局中编写相同的布局,还是应该使用标记? –
madcoderz
2011-02-04 09:15:12
使用include标签包含导航栏。将更新我的答案,使其更清楚。 – 2011-02-04 09:16:46