액션바와 네비게이션 허준영(jyheo0@gmail.com).

Slides:



Advertisements
Similar presentations
Android Application. 최신버전 안드로이드 SDK 설치 1. SDK 설치 접속.
Advertisements

Page  1 Copyright© Hanbit Media, Inc. All rights reserved. IT CookBook, 안드로이드 프로그래밍 본 강의교안은 수업상황을 도입 - 전개 - 마무리로 구분하여 수업의 각 단계에서 필요한 요소 중 강의교안으로.
Android Tutorial 안드로이드 SDK 설치 및 기초 프로그래밍 강좌입니다 서울대학교 네트워크 융합 및 보안 연구실 권 윤
이벤트 처리  GUI 운영체제는 이벤트 드리븐으로 동작한다.  사용자와 상호 작용하려면 이벤트를 매끄럽게 처리하는 기술이 필요하다.  안드로이드에는 이벤트를 처리하는 다양한 방법이 있다.  팀 작업을 위해 모든 방법을 숙지해야 하며 자바의 고급 문법이 사용된다.
IT CookBook, Android Studio 를 활용한 안드로이드 프로그래밍 Copyright© 2015 Hanbit Academy, Inc. All rights reserved. 14. 서비스와 브로드캐스트 리시버.
Application Create Android Side. Application 설계 시 꼭 지켜야 할 5 가지 UI 쓰레드는 UI 만 처리하게 하자 사용자를 방해하지 말라. 다양한 화면 해상도를 지원하라 –Absolutelayout 을 사용하지 말아라 ( 고정값 )
삼성소프트웨어멤버십 20 th 박희근 ( A n d r o i d.
웹 기획 스터디 – 초급 Step4. Mobile & Tablet PC. Device 종류 크게 OS 의 종류로 나뉘며, 각 OS 별로 해상도, 제조사 별로 나뉜 다.  OS 종류 및 시장 점유율 이미지 출처 :
1 도시가스  추진계획  보고 군산대학교 통학버스 예약 시스템 APP 설치 매뉴얼 군산대학교 통학버스 예약 시스템
Android Application 데이터베이 스. 데이터베이스 활용하 기  안드로이드에 쓰이는 DBMS 의 이름은 SQLite.  SQLite 는 경량의 임베디드 데이터베이스 엔젠이며, 아이폰, 파이어폭스 등 여 러 곳에서 이미 많이 채택된 검증된 엔진이다. 
CHAP 3. 첫번째 애플리케이션 예제 #1: text 문자를 출력 예제 #2: UI를 XML로 표현 – main.xml
6 메 뉴.
군산대학교 통학버스 예약 시스템 APP 설치 매뉴얼
목차 Contents 무선인터넷용 비밀번호 설정방법 Windows 7 Windows 8 Windows XP MAC OS.
CHAP 18. 멀티미디어.
CHAP 10. 액티비티와 인텐트.
CHAP 10. 액티비티와 인텐트.
Android Programming 고급위젯
Android Application 애플리케이션 위젯.
CHAP 19. 구글맵.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
02. 처음으로 만드는 안드로이드 애플리케이션 제목.
Contents 학습목표 이벤트를 처리하는 여러 가지 형식과 각 형식의 장단점에 대해 상세하게 연구하고 기본적인 이벤트에 대한 실습을 한다. 사용자의 입력을 자유자재로 처리하기 위해서 반드시 습득해야 하는 중요한 기술 실습. 학습내용 이벤트 핸들러 여러 가지 이벤트.
CHAP 7. 메뉴와 대화상자.
Contents 학습목표 Canvas와 Paint 객체를 통해 화면에 원하는 도형을 그리고 속성을 변경하는 기본적인 방법에 대해 소개한다. 토스트로 메시지를 출력하는 방법과 스피커를 통해 소리를 출력하는 방법에 대해서도 알아본다. 학습내용 캔버스 그리기 객체 쉐이더 그외.
02. 처음 만드는 안드로이드 애플리케이션 제목.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
최윤정 Java 프로그래밍 클래스 상속 최윤정
제4강 노티피케이션,메뉴,고급위젯 안드로이드 앱 개발 강좌.
Java Seminar 6.
CHAP 4. 이벤트 처리.
CHAP 6. 이벤트 처리.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
Chapter 13 GUI 프로그래밍 01 GUI 화면 구성 02 GUI 이벤트 처리 03 GUI 메뉴와 툴바 예제 모음 요약
어댑터뷰 리스트 뷰, 그리드 뷰, 스피너, 갤러리 등을 묶어 어댑터 뷰라 부름
CHAP 24. nfc와 앱위젯.
CHAP 11. 액티비티와 인텐트.
CHAP 7. 메뉴와 대화상자.
07. 메뉴와 대화상자 제목. 07. 메뉴와 대화상자 제목 메뉴를 작성하고 사용하는 방법을 배운다. 토스트의 다양한 출력 방법을 알아본다. 대화상자의 사용법을 익힌다.
14. 서비스와 브로드캐스트 리시버 제목. 14. 서비스와 브로드캐스트 리시버 제목.
07. 메뉴와 대화상자 제목. 07. 메뉴와 대화상자 제목 메뉴를 작성하고 사용하는 방법을 배운다. 토스트의 다양한 출력 방법을 알아본다. 대화상자의 사용법을 익힌다.
7주차 Android Application.
CHAP 8. 그래픽.
CHAP 6. 이벤트 처리.
ASP.NET AJAX 비동기 게시판 작성 2007 컴퓨터공학실험( I )
CHAP 12. 리소스와 보안.
컴퓨터 소프트웨어 설계 및 실험 년 1학기 실험계획 -.
자바응용.
홀인원2.0 설치 메뉴얼.
CHAP 3. 첫번째 애플리케이션.
CHAP 5. 레이아웃.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
CHAP 13. 서비스와 방송 수신자.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
10. 액티비티와 인텐트 제목. 10. 액티비티와 인텐트 제목 액티비티의 개념을 파악한다. 인텐트의 개념과 활용법을 익힌다. 액티비티 생명주기에 대해 알아본다.
Power Java 제11장 상속.
11. 어댑터뷰 제목. 11. 어댑터뷰 제목 리스트뷰와 그리드뷰 활용법을 배운다. 갤러리와 스피너의 사용법을 익힌다.
단축키 기능 1. 단축키 기능 설명 Alt + R 조회 S 저장 I 삽입 A 추가 D 삭제 P 출력 Q 닫기
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
9 브라우저 객체 모델.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
15강_액티비티 액티비티란? 새로운 액티비티로 전환 생명주기 화면방향(Orientation)
CHAP 5. 메뉴와 대화상자.
CCISS 어레이 형식 centos7 설치방법
Chapter 11. 문서 인쇄 및 파일 형식.
BoardGame 보드게임 따라가기.
Presentation transcript:

액션바와 네비게이션 허준영(jyheo0@gmail.com)

액션바(Action Bar) 타이틀 메뉴 참고: Action Provider를 이용하여 Share를 구현할 수도 있음 액션 아이템 - 액션바에 표시 액션바가 좁으면 … 옵션 메뉴로 참고: Action Provider를 이용하여 Share를 구현할 수도 있음 타이틀 액션 아이템 옵션 메뉴 https://developer.android.com/training/appbar/action-views.html

액션 아이템 빠르게 액션을 실행 자주 사용되는 것은 아이콘으로 액션 바에 나머지 추가 액션 아이템은 옵션 메뉴로 menu.xml을 이용하여 생성

액션 아이템 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 https://github.com/jyheo/AndroidTutorial/blob/master/NavigationUI/app/src/main/java/com/example/jyheo/navigationui/MainActivity.java

액션 아이템 – main_menu.xml app:showAsAction ifRoom never withText always <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/quick_action1" android:title="Quick1" android:icon="@drawable/ic_android_black_24dp" app:showAsAction="ifRoom"/> android:id="@+id/action_settings" android:title="@string/action_settings" android:icon="@drawable/ic_settings_black_24dp" android:id="@+id/action_subactivity" android:title="Sub Activity"/> android:id="@+id/action_navdrawer" android:title="Navigation Drawer"/> </menu> app:showAsAction ifRoom never withText always https://github.com/jyheo/AndroidTutorial/blob/master/NavigationUI/app/src/main/res/menu/main_menu.xml

액션 클릭 이벤트 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); } https://github.com/jyheo/AndroidTutorial/blob/master/NavigationUI/app/src/main/java/com/example/jyheo/navigationui/MainActivity.java

위로 돌아가기(Up 네비게이션) 현재 보이는 액티비티에서 부모 액티비티로 되돌아가기 부모 액티비티는 AndroidManifest.xml에 미리 정의해 둬야 함 <application … > <activity android:name=".SubActivity" android:parentActivityName=".MainActivity" /> </application> 주의! 백 버튼으로 뒤로 가기는 백 스택에서 이전 액티비티로 가는 것임

위로 돌아가기 – 액티비티 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()를 호출해야 함 위로 가기 버튼의 모양을 바꾸기 위한 코드

Navigation Drawer

Navigation Drawer 레이아웃 구성 2. 드로어 내 메뉴 리스너 구현하기 3. 액션바 토글 구현하기 2. 드로어 내 메뉴 리스너 구현하기 3. 액션바 토글 구현하기 (드로어 열림/닫힘 상태 감지 및 앱 아이콘을 이용한 열기/닫기 지원)

Layout 구성 <android.support.v4.widget.DrawerLayout ...>     <FrameLayout ... />  <!-- 1. 주 컨텐츠를 표시할 뷰 -->     <ListView ...        <!-- 2. 드로어에 표시될 뷰 -->         android:layout_gravity="드로어가 표시될 방향" />         </android.support.v4.widget.DrawerLayout>

Layout 구성 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" …" tools:context="kr.ac.hansung.jmlee.ch06_actionbar.NavigationDrawerActivity"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/frameLayout"> </FrameLayout> <ListView <!– 이것이 맨 마지막에 와야 함 android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start“ <!– 바드시 주어져야 함  android:id="@+id/listView" android:background="@android:color/holo_green_dark" /> </android.support.v4.widget.DrawerLayout>

메뉴 리스너 구현하기 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); } });

액션바 토글링 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); }

액션바 토글링 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);

백 스택(Back Stack) 액티비티 실행 히스토리가 스택 형태로 기록되는 것 새로 액티비티가 실행되면 화면에 보이던 액티비티는 백 스택 으로 들어가고 백 버튼을 누르면 백 스택의 가장 위에 있는 액티비티가 다시 표시됨 출처: https://developer.android.com/guide/components/tasks-and-back-stack.html

태스크(Task) 액티비티의 집합, 태스크 마다 백 스택으로 쌓여 있음 Foreground task 현재 화면에 표시되는 태스크 – Task B Background task 현재 화면에 표시되지 않고 뒤에서 실행 중인 태스크 – Task A 태스크의 생성 앱을 새로 실행하면 새 태스크가 생성되거나 Background로 실행 중이 면 Foreground로 되돌아감 액티비티의 시작 모드로 새 태스크를 생성하게 할 수 있음 홈 버튼을 누르면 태스크가 백그라운드로 감 출처: https://developer.android.com/guide/components/tasks-and-back-stack.html

액티비티 시작(Launch) 모드 standard: 기본 모드, 항상 새로 액티비티 인스턴스를 태스크 내에 생 성함 singleTop: 태스크의 백 스택 탑에 이미 동일한 액티비티 인스턴스가 존재하면 새로 만들지 않고 onNewIntent() 메소드를 호출함 singleTask: 태스크를 새로 만들고 새 태스크에 액티비티 인스턴스를 생성함. 단, 이미 액티비티 인스턴스가 존재하고 있다면 그 액티비티 의 onNewIntent() 메소드를 호출하고 해당 태스크를 foreground로 가져옴 singleInstance: singleTask와 같은데, 태스크에 하나의 액티비티 인스 턴스만 존재할 수 있음

액티비티 시작 모드 SingleTop SingleTask Start Activity C Start Activity B Activity A Activity A Activity B Start Activity B Activity C Activity B Activity A

액티비티 시작 모드 지정하기 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() 메소드 호출