NoActionBar 스타일 설정
바로가기 메뉴는 화면에 보이는 부분이므로 XML 레이아웃에서 넣어주는 것이 좋습니다.
다만 위쪽 타이틀 부분을 포함해서 화면의 전체적인 구성을 모두 넣어주어야 하므로 조금 많은 코드가 필요합니다.
하지만 한 번 익숙해지면 그대로 복사해서 사용할 수 있습니다.
액션바라 불리는 타이틀 부분이 XML 레이아웃에서 추가되므로 액티비티의 스타일은 액션바가 없는 NoActionBar로 설정해야 합니다.
AndroidManifest.xml 파일에서 액티비티에 스타일을 적용합니다.
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
AppTheme.NoActionBar 스타일은 /res/styles.xml 파일에 추가합니다.
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
XML 레이아웃 정의
XML 레이아웃에서는 상단에 AppBarLayout 태그로 화면 상단에 액션바를 보여주도록 합니다.
그리고 그 아래에는 FrameLayout으로 메인 화면에 보여줄 내용을 중첩해서 넣을 수 있도록 해줍니다.
그 아래에 있는 NavigationView가 바로가기 메뉴를 위한 뷰인데 평소에는 보이지 않다가 햄버거 모양 아이콘을 눌렀을 때 보이게 됩니다.
다음은 XML 레이아웃의 기본 구조입니다. (속성은 일부 생략되어 있습니다.)
<android.support.v4.widget.DrawerLayout>
<android.support.design.widget.CoordinatorLayout>
<android.support.design.widget.AppBarLayout>
<android.support.v7.widget.Toolbar />
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
</FrameLayout>
</android.support.design.widget.CoordinatorLayout>
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
</android.support.v4.widget.DrawerLayout>
바로가기 메뉴를 위한 뷰에서는 상단에 보이는 것이 nav_header_main.xml에 들어가 있고 하단에 보이는 것이 menu 폴더 안의 activity_main_drawer에 들어가 있다는 것을 알 수 있습니다.
바로가기 메뉴 선택 시의 기능
소스 코드에서는 약간의 코드가 들어가 있는 것을 볼 수 있습니다.
그 코드를 그대로 두고 필요한 부분만 수정합니다.
바로가기 메뉴 뷰에서 메뉴가 선택되었을 때 호출되는 메소드는 다음과 같습니다.
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.nav_0) {
Toast.makeText(this, "첫번째 메뉴 선택됨.", Toast.LENGTH_LONG).show();
onFragmentSelected(0, null);
} else if (id == R.id.nav_1) {
Toast.makeText(this, "두번째 메뉴 선택됨.", Toast.LENGTH_LONG).show();
onFragmentSelected(1, null);
} else if (id == R.id.nav_2) {
Toast.makeText(this, "세번째 메뉴 선택됨.", Toast.LENGTH_LONG).show();
onFragmentSelected(2, null);
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
최근댓글