2011-02-04 109 views
3

我在我的应用程序中有一个导航栏,事情是我想让导航栏在所有活动中都可用。我想我必须设置contentView两次,但这当然不起作用。2布局1活动android

我一直在看,但我没有得到它的工作。我有一个超类,我可以从我的超类设置第二个布局吗?

回答

4

您应该通过其他布局的<include>标签包含导航栏。设置内容布局两次将不起作用,因为Android基本上始终使用用户最后告诉的回调。因此,

setContentLayout(R.layout.nav); 
setContentLayout(R.layout.main); 

将导致只使用主布局。

看看this article,它给出了使用include标签的例子。

+0

你的意思是我必须在每个布局中编写相同的布局,还是应该使用标记? – madcoderz 2011-02-04 09:15:12

+1

使用include标签包含导航栏。将更新我的答案,使其更清楚。 – 2011-02-04 09:16:46

2

您可以扩展标准活动(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代替。并且您的导航栏将被放置在您需要的位置,而不会在每个布局中一遍又一遍地重复它,并且污染布局(更不用说重复一个代码来控制每个活动类中的导航)。