티스토리 뷰
요즘 설정같은 경우에 옆에서 슬쩍 나오도록 하는 Drawer를 많이 사용을 하는데, 정리를 하여 보도록 한다.
예를 들면 페이스북 메뉴가 나오는것 같은 구조...
구성하는 방식은 다음과 같이 구성이 된다.
1. 레이아웃 구성
* 주의 : 드로어에 표시될 뷰가 먼저 지정되게 되면, 클릭이 안되는 이상한 현상들이 발생한다고 한다. 흠. 그러니 예제처럼 할것
* XML의 실제
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout_root" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@+id/layout_main" android:layout_width="match_parent" android:layout_height="match_parent"/> <ListView android:id="@+id/layout_slide" android:layout_width="200dp" android:layout_height="match_parent" android:layout_gravity="start"/> </android.support.v4.widget.DrawerLayout>
이 부분에서 특별한 설정은 ListView의 설정중에 android:layout_gravity="start"를 볼수 있다. 이렇게 설정을 하여주게 되면, 나오는 방향이 사용방식에 따라서 자동으로 결정이 되게 되며, 수동으로 설정을 하여 주기 위해서는 왼쪽에서 오른쪽으로는 left, 오른쪽에서 왼쪽은 right를 지정하여 주도록 한다.
2. 드로어 내부 메뉴 리스너 구현
public class MainActivity extends Activity { private String[] items = {"A", "B", "C", "D", "E"}; private ListView mListView; private FrameLayout mFrameLayout; private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> adapter, View view, int position, long id) { Log.d("TEST", String.valueOf(position); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView = (ListView)findViewById(R.id.layout_slide); mFrameLayout = (FrameLayout)findViewById(R.id.layout_main); mListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items)); mListView.setOnItemClickListener(new DrawerItemClickListener()); } }
설명이 필요할것 같지는 않네요.
3. 액션바 토클 구현 (버튼을 눌렀을 경우에 열리도록 하는 부분)
다음 소스를 추가하여 주도록 한다.
private DrawerLayout mDrawerLayout; private ActionBarDrawerToggle mActionBarDrawerToggle; @Override public void onCreate(Bundle savedInstanceState) { ... mDrawerLayout = (DrawerLayout)findViewById(R.id.layout_root); mActionBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_icon, R.string.open_drawer, R.string.close_drawer) { @Override // 닫힘 감지 public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); } @Override // 열림 감지 public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); } }; mDrawerLayout.setDrawerListener(mActionBarDrawerToggle); getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); } @Override protected void onPostCreate(Bundle savedInstanceState){ super.onPostCreate(savedInstanceState); mActionBarDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mActionBarDrawerToggle.onConfigurationChanged(newConfig); } @Override public boolean onOptionsItemSelected(MenuItem item) { if(mActionBarDrawerToggle.onOptionsItemSelected(item)){ return true; } return super.onOptionsItemSelected(item); }
* 생성자 설명
- activity : 드로어를 포함하는 액티비티
- drawerLayout : 액티비티의 액션바와 연동할 드로어
- drawerImageRes : 드로어의 상태 표시에 사용할 이미지 (리소스)
- openDrawerContentDescRes : '드로어 열기' 에 해당하는 문자열 리소스 (접근성 지원용)
- closeDrawerContentDescRes : '드로어 닫기'에 해당하는 문자열 리소스 (접근성 지원용)
* 임의적으로 다른동작에서 open등을 사용할 경우
- open : mDrawerLayout.openDrawer(mListView);
- close : mDrawerLayout.closeDrawer(mListView);
드로어 상태 표시에 사용될 이미지를 제공하여 준다고 한다.
http://developer.android.com/downloads/design/Android_Design_Icons_20130926.zip
더 자세한 내용
https://developer.android.com/training/implementing-navigation/nav-drawer.html
'Mobile > Android' 카테고리의 다른 글
PackageName으로 어플구동 (0) | 2014.08.08 |
---|---|
다른 어플 런처아이콘 만들기 (0) | 2014.08.07 |
SlingPaneLayout (0) | 2014.08.06 |
ActionBar에 overflow menu 보여주기 (0) | 2014.08.06 |
Fragment가 Activity에 붙어있는지 확인 (0) | 2014.08.06 |
- Total
- Today
- Yesterday
- centos8
- git
- Python
- golang
- docker
- war
- Java
- CentOS
- Spring
- MySQL
- go
- cocoapods
- ios
- ubuntu
- nodejs
- rxswift
- Kotlin
- SWIFT
- Windows
- Linux
- php
- enum
- Gradle
- tomcat
- android
- Xcode
- github
- intellij
- windows10
- Codable
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |