Download presentation
Presentation is loading. Please wait.
1
액션바와 네비게이션
2
액션바(Action Bar) 타이틀 메뉴 참고: Action Provider를 이용하여 Share를 구현할 수도 있음
액션 아이템 - 액션바에 표시 액션바가 좁으면 … 옵션 메뉴로 참고: Action Provider를 이용하여 Share를 구현할 수도 있음 타이틀 액션 아이템 옵션 메뉴
3
액션 아이템 빠르게 액션을 실행 자주 사용되는 것은 아이콘으로 액션 바에 나머지 추가 액션 아이템은 옵션 메뉴로
menu.xml을 이용하여 생성
4
액션 아이템 MainActivity – onCreateOptionsMenu() 오버라이드
public class MainActivity extends AppCompatActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); return super.onCreateOptionsMenu(menu); } menu/main_menu.xml
5
액션 아이템 – main_menu.xml app:showAsAction ifRoom never withText always
<menu xmlns:android=" xmlns:app=" <item android:title="Quick1" app:showAsAction="ifRoom"/> android:title="Sub Activity"/> android:title="Navigation Drawer"/> </menu> app:showAsAction ifRoom never withText always
6
액션 클릭 이벤트 public class MainActivity extends AppCompatActivity {
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.quick_action1: // return true; case R.id.action_settings: case R.id.action_subactivity: startActivity(new Intent(this, SubActivity.class)); case R.id.action_navdrawer: startActivity(new Intent(this, NavDrawerActivity.class)); default: return super.onOptionsItemSelected(item); }
7
위로 돌아가기(Up 네비게이션) 현재 보이는 액티비티에서 부모 액티비티로 되돌아가기
부모 액티비티는 AndroidManifest.xml에 미리 정의해 둬야 함 <application … > <activity android:name=".SubActivity" android:parentActivityName=".MainActivity" /> </application> 주의! 백 버튼으로 뒤로 가기는 백 스택에서 이전 액티비티로 가는 것임
8
위로 돌아가기 – 액티비티 ActionBar의 setDisplayHomeAsUpEnabled(true) 호출
public class SubActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sub); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); Drawable drawable = getDrawable(R.drawable.ic_keyboard_arrow_left_black_24dp); if (drawable != null) { drawable.setTint(Color.WHITE); actionBar.setHomeAsUpIndicator(drawable); } Support Library를 사용하지 않는다면(즉, Activity를 상속 받았다면) getActionBar()를 호출해야 함 위로 가기 버튼의 모양을 바꾸기 위한 코드
9
Navigation Drawer
10
Navigation Drawer 레이아웃 구성 2. 드로어 내 메뉴 리스너 구현하기 3. 액션바 토글 구현하기
2. 드로어 내 메뉴 리스너 구현하기 3. 액션바 토글 구현하기 (드로어 열림/닫힘 상태 감지 및 앱 아이콘을 이용한 열기/닫기 지원)
11
Layout 구성 <android.support.v4.widget.DrawerLayout ...>
<FrameLayout ... /> <!-- 1. 주 컨텐츠를 표시할 뷰 --> <ListView ... <!-- 2. 드로어에 표시될 뷰 --> android:layout_gravity="드로어가 표시될 방향" /> </android.support.v4.widget.DrawerLayout>
12
Layout 구성 <android.support.v4.widget.DrawerLayout xmlns:android=" xmlns:tools=" …" tools:context="kr.ac.hansung.jmlee.ch06_actionbar.NavigationDrawerActivity"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" </FrameLayout> <ListView <!– 이것이 맨 마지막에 와야 함 android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start“ <!– 바드시 주어져야 함 /> </android.support.v4.widget.DrawerLayout>
13
메뉴 리스너 구현하기 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_navigation_drawer); drawerLayout= (DrawerLayout)findViewById(R.id.activity_navigation_drawer); androidTitles= getResources().getStringArray(R.array.android_array); ArrayAdapter<String> adapter= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, androidTitles); listView= (ListView)findViewById(R.id.listView); listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { … listView.setItemChecked(position, true); drawerLayout.closeDrawer(listView); } });
14
액션바 토글링 DrawerLayout drawerLayout;
ActionBarDrawerToggle actionBarDrawerToggle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_navigation_drawer); ... actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close); drawerLayout.addDrawerListener(actionBarDrawerToggle); actionBar= getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); }
15
액션바 토글링 protected void onPostCreate(Bundle savedInstanceState){
super.onPostCreate(savedInstanceState); actionBarDrawerToggle.syncState(); Log.i("jmlee", "onPostCreate"); } @Override public boolean onOptionsItemSelected(MenuItem item) { Log.i("jmlee", "onOptionsItemSelected"); if(actionBarDrawerToggle.onOptionsItemSelected(item)){ return true; return super.onOptionsItemSelected(item);
16
백 스택(Back Stack) 액티비티 실행 히스토리가 스택 형태로 기록되는 것
새로 액티비티가 실행되면 화면에 보이던 액티비티는 백 스택 으로 들어가고 백 버튼을 누르면 백 스택의 가장 위에 있는 액티비티가 다시 표시됨 출처:
17
태스크(Task) 액티비티의 집합, 태스크 마다 백 스택으로 쌓여 있음 Foreground task
현재 화면에 표시되는 태스크 – Task B Background task 현재 화면에 표시되지 않고 뒤에서 실행 중인 태스크 – Task A 태스크의 생성 앱을 새로 실행하면 새 태스크가 생성되거나 Background로 실행 중이 면 Foreground로 되돌아감 액티비티의 시작 모드로 새 태스크를 생성하게 할 수 있음 홈 버튼을 누르면 태스크가 백그라운드로 감 출처:
18
액티비티 시작(Launch) 모드 standard: 기본 모드, 항상 새로 액티비티 인스턴스를 태스크 내에 생 성함
singleTop: 태스크의 백 스택 탑에 이미 동일한 액티비티 인스턴스가 존재하면 새로 만들지 않고 onNewIntent() 메소드를 호출함 singleTask: 태스크를 새로 만들고 새 태스크에 액티비티 인스턴스를 생성함. 단, 이미 액티비티 인스턴스가 존재하고 있다면 그 액티비티 의 onNewIntent() 메소드를 호출하고 해당 태스크를 foreground로 가져옴 singleInstance: singleTask와 같은데, 태스크에 하나의 액티비티 인스 턴스만 존재할 수 있음
19
액티비티 시작 모드 SingleTop SingleTask Start Activity C Start Activity B
Activity A Activity A Activity B Start Activity B Activity C Activity B Activity A
20
액티비티 시작 모드 지정하기 In Android Manifest In Java Code
<activity android:name=".SingleTopActivity" android:launchMode="singleTop"> </activity> In Java Code Intent singleTop = new Intent(); ... singleTop.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 인텐트 플래그 FLAG_ACTIVITY_NEW_TASK – singleTask 모드 FLAG_ACTIVITY_SINGLE_TOP – singleTop 모드 FLAG_ACTIVITY_CLEAR_TOP – 이미 액티비티 인스턴스가 foreground 태스크에 존재한다면 위에 있는 액티비티 인스턴스는 모두 제거하고 해당 액티비티의 onNewIntent() 메소드 호출
Similar presentations