제4강 노티피케이션,메뉴,고급위젯 안드로이드 앱 개발 강좌
목 차 Notification(노티피케이션) 1 메뉴 2 고급위젯 3
1. 노티피케이션(Notification)
1.1 노티피케이션의 종류 앱 제작시 프로그램이 사용자에게 어떤 이벤트를 알려줘야 할 상황 발생 사용자로부터 피드백을 받을 수도 안 받을 수도 있음 [노티피케이션이 주로 사용되는 상황] 파일이 저장되고 있고 저장이 완료되면 사용자에게 파일이 모두 잘 저장됐다고 알려줘야 할 경우 프로그램이 백그라운드 프로세스로 돌고 있는 상황에서 사용자에게 진행 상황에 대해 정기적으로 알려줘야 할 경우 파일을 다운받을 시 사용자가 얼마나 기다려야 하는지 등의 메시지를 전달해줘야 할 경우 노티피케이션 종류 특징 토스트 노티피케이션 윈도우 표면에 보이는 팝업메세지 크기는 글자의 크기/개수에 때라 달라짐 시간이 지나면 저절로 사라지거나 나타남 사용자로부터 이벤트를 받을 수 없음 상태바 노티피케이션 시스템의 상태바에 아이콘을 추가하고 노티피케이션 윈도우에 메시지를 추가 사용자가 노티피케이션 메시지를 클릭시 안드로이드 프레임워크에서는 사용자가 미리 정의해 놓은 인텐트 실행 애플리케이션이 백그라운드로 실행되고 실행중에 사용자에게 어떤 이벤트를 공지할 때 아주 유용 대화상자 노티피케이션 현재 액티비티의 전면에 나타나는 조그만 윈도우 대화상자와 동일 대화상자가 실행되면 액티비티는 포커스를 잃어버리고 사용자의 입력을 받을 수 있는 상태가 됨 애플리케이션이 포어그라운드로 실행되고 실행중에 사용자에게 어떤 이벤트를 공지할 때 아주 유용
1.2 상태바 노티피케이션 (1) 노티피케이션 가이드 라인 (2) 상태바 노티피케이션 만들기 백그라운드 서비스로 애플리케이션이 동작할 때 사용자로부터 어떤 응답을 받아야 할 경우에 사용 (1) 노티피케이션 가이드 라인 시간과 그다지 상관이 없는 이벤트는 노티피케이션을 사용하지 말아야 한다. 현재의 화면에서 알려도 될 만한 내용은 굳이 노티피케이션을 사용하지 말아야 한다. 사용자가 굳이 알 필요가 없는 시스템적인 상세한 메시지는 노티피케이션을 사용하지 말아야 한다. 사용자가 노티피케이션의 사용여부를 직접 제어할 수 있게끔 해야 한다. 마지막으로 노티피케이션을 이용해서 광고하지 말아야 한다. (2) 상태바 노티피케이션 만들기 액티비티나 서비스에 모두 만들 수 있지만 , 서비스에 주로 생성함 상태바 노티피케이션 Notification클래스와 NotificationManager로 만들 수 있음 Notification 클래스의 객체 : 아이콘이나 메시지, 그외의 부가 속성 정보를 갖고 있는 노티피케이션의 속성 정보 2) NotificationManager : 상태바를 관리하고 실행하는 안드로이드 프레임워크의 서비스
1.2 상태바 노티피케이션 (3) 노티피케이션 생성 기본 절차 NotificationManager 개체를 얻음 String ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager = (NotificationManager)getSystemService(ns); 2) Notification객체를 생성하고 유지 시간을 설정 int icon = R.drawable.notification_icon; CharSequence tickerText = "상태바 노티피케이션"; long when = System.currentTimeMillis(); Notification.Builder builder = new Notification.Builder(StatusNotificationActivity.this); builder.setSmallIcon(icon).setTicker(tickerText).setWhen(when); Notification notification = builder.getNotification(); 3) 노티피케이션 메시지와 메시지 클릭 시 띄울 PendingIndent를 정의 Context context = getApplicationContext(); CharSequence contentTitle = "내 노티피케이션!!!"; CharSequence contentText = "Hello World Call"; Intent notificationIntent = new Intent(con, HelloWorldActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(con, 0, notificationIntent, 0); notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 4) NotificationManager에게 Notification을 전달 mNotificationManager.notify(HELLO_ID, notification);
1.3 리치 노티피케이션 BigPicture BigText InboxStyle 젤리빈(4.1)이후 상태바 노티피케이션의 변화 발생 좀더 화려한 그래픽과 내용을 제공할 수 있는 형태의 노티피케이션 추가 BigPicture,BigText, InboxStyle노티피케이션 3가지 종류 BigPicture BigText InboxStyle
2. 메뉴(Menu)
2.1 메뉴 메뉴 XML 요소 화면에서 사용자가 어떤 액션을 취하는 데 있어서 사용자에게 친숙한 인터페이스 옵션 메뉴, 컨텐스트 메뉴, 서브메뉴 3가지 기본적인 메뉴 형태 제공 [메뉴 사용방법] 메뉴와 메뉴 아이템을 XML에 정의 소스코드에서 객체로 가져오기 위해 메뉴 인플레이터를 사용 메뉴 XML 요소 요소들 설 명 <menu> Menu 클래스를 정의하는 요소 메뉴 아이템 <item>요소를 포함 XML 최상위 노드 한 개 이상의 <group><item>을 가짐 <item> MenuItem클래스를 정의하는 요소 메뉴를 정의하는 단일항목을 정의 서브메뉴를 만들 수 있음 <group> Optional한 속성 메뉴 아이템을 담고 있는 눈에 안 보이는 컨테이너 역할 활성화 상태나 가시성 속성을 공통으로 적용해 메뉴 아이템을 분류할 수 있게 함
android:alphabeticShortcut 2.1 메뉴 메뉴 XML 요소의 대표적 속성 속성 설 명 android:id 메뉴 아이템의 유일한 식별자 소스에서 id를 이용해 접근 가능 android:icon 메뉴 아이템의 아이콘 설정 Drawable 객체의 참조 값으로 사용 android:title 메뉴 아이템의 제목 설정 String객체의 참조 값으로 사용 android:onClick 클릭했을 때 호출돼야 하는 메소드 이름 한 개의 MenuItem만 파라미터로 넘겨받을 수 있게 해야 함 onOptionsItemSelected()보다 먼저 수행 android:alphabeticShortcut 단축키를 지정하는 속성 숫자로 설정해야 함 android:checked 기본적으로 메뉴 아이템을 체크해야 한다면 속성은 true 메뉴 리소스 인플레이팅 소스 코드안에서 메뉴 리소스를 사용하려면 MenuInflater.inflate()메소드 사용 public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.option_menu, menu); return true; }
2.2 메뉴의 종류 #1 옵션 메뉴 사용자가 메뉴 버튼을 터치했을 때 나타나는 기본적인 메뉴 메뉴 아이템이 여러 개가 모여 있는 구조 안드로이드 3.0이상 부터는 액션바(Action Bar)에서 빨리 접근할 수 있는 메뉴 제공 -> 액션아이템(Action Item) 안드로이드 2.3이하에서는 스크린 하단에 위치 , 안드로이드 3.0이상에서는 옵션 메뉴는 액션 바에 위치
2.2 메뉴의 종류 #2 컨텍스트 메뉴 컨텍스트 메뉴 사용법 윈도우 운영체제에서 마우스 오른쪽 버튼을 클릭했을 때 나타는 메뉴라고 보면 됨 뷰를 롱 클릭했을 경우 컨텍스트 메뉴가 나타남 주로 리스트 뷰(ListView)에서 사용 컨텍스트 메뉴 사용법 뷰를 ‘등록’하는 절차 수행 - registerForContextMenu(View) 호출 2) 컨텍스트 메뉴의 모양과 동작정의 - OnCreateContextMenu() 와 onContetItemSelected() 메소드 오버라이드
2.2 메뉴의 종류 #3 서브 메뉴 메뉴안에서 특정 메뉴 아이템을 선택했을 때 나타나는 메뉴 사용자가 메뉴 아이템을 선택해 하위로 더 열 수 있는 구조의 메뉴 서브 메뉴는 자기 자신에 서브 메뉴를 붙일 수는 없음 메뉴에 너무 많은 기능들이 들어가야 하는 경우에 사용하면 좋음
3. 고급 뷰와 위젯
3.1 날짜 피커(Date Picker) 날짜를 선택할 수 있는 위젯 년,월,날짜를 스피너 나 캘린더 뷰(Calendar View)를 이용해 출력 DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay); this – context : 이 객체를 생성한 글로벌 정보를 담고 있고, 해당 Activity객체를 넣어줌 mDateSetListener – DatePickerDialog.OnDateSetListner : 리스너 객체 mYear, mMonth, mDay : 날짜 변수들
3.2 프로그레스 바 작업의 진행상황을 비주얼하게 보여줌 예) 스트리밍이 재생되는 중간 진행상황을 보여주는 경우 , 다운로드시 진행상황 보여주는 경우 new Thread(new Runnable() { public void run() { while (mProgressStatus < 100) { doWork(); mHandler.post(new Runnable() { mProgress.setProgress(mProgressStatus); progress_progress.setText("progressbar progress is " + mProgressStatus); } }); }).start(); 백그라운드 스레드는 내부적인 연산만 해야 하며 다른 스레드 소속의 UI를 건드릴 수 없다. mHandler객체의 post메소드 호출
3.2 프로그레스 바
3.3 웹뷰(WebView) 웹뷰 : 웹 페이지를 화면에 보여주는 역할을 수행 3-1) AndroidManifest.xml파일에 인터넷에 접속할 수 있는 권한을 줘야함
3.3 웹뷰(WebView)
3.3 웹뷰(WebView) 3-2) 레이아웃 XML 입력 3-3) 자바파일 소스 수정 <?xml version="1.0" encoding="utf-8"?> <WebView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> 3-3) 자바파일 소스 수정 WebView mWebView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.webviewmain); mWebView = (WebView) findViewById(R.id.webview); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.loadUrl("http://www.daum.net"); }