2011-02-04 6 views
3

내 앱에 내비게이션 막대가 있습니다. 모든 것은 모든 활동에서 navbar를 사용할 수있게하려는 것입니다. 나는 contentView를 두 번 설정해야한다고 생각합니다.하지만 그건 효과가 없습니다.2 레이아웃 1 활동 android

나는보고 있었지만 잘 작동하지 않습니다. 수퍼 클래스를 가지고 있는데, 수퍼 클래스에서이 두 번째 레이아웃을 설정할 수 있습니까?

답변

4

다른 레이아웃의 <include> 태그를 통해 탐색 바를 포함해야합니다. Android가 콜백에 기본적으로 항상 사용자가 마지막으로 말한 것을 사용하므로 콘텐츠 레이아웃을 두 번 설정하는 것은 작동하지 않습니다. 따라서

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

은 기본 레이아웃 만 사용하게됩니다.

포함 태그를 사용하는 예를 보여주는 this article을 살펴보십시오.

+0

모든 레이아웃에서 동일한 레이아웃을 작성해야한다는 것을 의미합니까, 아니면 태그를 사용해야합니까? – madcoderz

+1

탐색 표시 줄을 포함하려면 include 태그를 사용하십시오. 더 명확하게 답변을 업데이트합니다. –

2

다른 활동을 사용하는 경우 표준 액티비티 (Activity, ListActivity 등)를 확장하여 nav_bar 포함을위한 기초로 사용할 수 있습니다. 예를 들어

:

<LinearLayout 
    ... 
    android:orientation="vertical" 
> 
    <YourNavBarComponent 
    ... 
    /> 
    <FrameLayout 
    android:id="@+id/nav_content" 
    ... 
    > 
    // Leave this empty for activity content 
    </FrameLayout> 
</LinearLayout> 

같은 nabar와 레이아웃을 정의 이것은 nav_content 프레임에 다른 레이아웃을 포함하여 기본 레이아웃 될 것입니다. 당신이 탐색 모음을 필요로 새로운 활동을 만들 때, 단지 대신 NavActivity을 확장, 지금

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 
    } 
} 

을 그리고 : 다음에 기본 활동 클래스를 생성하고 다음을 수행합니다. 그리고 네비게이션 바는 필요할 때마다 레이아웃에 반복해서 반복하지 않고 레이아웃을 오염시키지 않고 (모든 활동 클래스에서 네비게이션을 제어하는 ​​코드 반복은 말할 필요도 없음) 배치됩니다.