# 사용자 인터페이스(UI)
- 내비게이션 바 (뒤로 가기, 홈, 최근 앱 버튼)
- 액션바
- 다중 패널 레이아웃
- 앱의 외관 커스텀화
- 터피 피드백
- 제스처
터치(touch) : 눌렀다 뗌
오래 누르기(long press) : 오랫동안 눌렀다가 뗌
드래그(drag), 스와이프 : 누르고 이동
더블 터치(double touch) : 짧게 두 번 누름
오래 누르면서 드래그(long press drag) : 오래 누른 후 움직임
더블 터치 드래그(double touch drag) : 더블 터치 후에 움직임
핀치 열기(pinch open) : 두 손가락으로 누르고 밖으로 벌림
핀치 닫기(pinch close) : 두 손가락으로 누르고 안으로 좁힘
# 메뉴
- 애플리케이션에 대한 추가 옵션을 표시하기 위하여 사용
# 메뉴 종류
- 옵션 메뉴 : 앱에 전체적인 영향을 미치는 작업 배치(예. 탐색, 설정)
- 컨텍스트 메뉴 : 사용자가 화면의 요소를 길게 누르면 나타나는 메뉴
- 팝업 메뉴 : 특정한 뷰에 붙어서 나타나는 수직방향 리스트
# 메뉴 생성 방법
1. 코드로 메뉴 생성
2. XML로 메뉴 생성
- 메뉴 구조를 쉽게 시각화
- 코드와 메뉴가 분리되어 쉽게 변경 가능
- 플랫폼 버전이나 화면 크기에 따라 서로 다른 메뉴 구성 가질 수 있음
- [res] 폴더의 [New] -> [Directory] -> menu 폴더 생성
- <menu> : 메뉴 항목을 저장하는 컨테이너. Menu 객체 생성
- <item> : 하나의 메뉴 항목. MenuItem 객체 생성. 서브 메뉴 생성 가능
- <group> : <item> 요소들을 묶는 컨테이너
# 옵션 메뉴(option menu)
- 현재 액티비티와 관련된 여러 가지 동작이나 선택사항을 설정하는 메뉴
- onCreateOptionsMenu() 메소드 재정의
- getMenuInflater() 메소드 : MenuInflater 개체 반환
- inflate() 메소드 : 메뉴 리소스 팽창시켜 Menu 객체로 만듦
# 메뉴 팽창
- xml 파일을 읽어 실제 메뉴 생성
- 프로그래밍 객체로 변환
# 클릭 이벤트 처리
- onOptionItemSelected() : 사용자가 옵션 메뉴에서 항목을 선택하면 호출. 선택한 메뉴 항목은 매개변수로 전달
- 성공적으로 처리했으면 true 반환. 그렇지 않으면 상위 클래스로 전달
- getItemId() : 선택된 메뉴 항목의 ID 반환
# 코드로 옵션 메뉴 생성
- add(int groupId, int itemId, int order, CharSequence title)
title을 제목으로 가지는 메뉴 항목을 메뉴에 추가
groupId는 항목들을 모아서 그룹핑할 때 사용. 그룹이 없으면 0으로 줌
itemId는 메뉴 항목의 ID. 중복 안됨
order는 메뉴 항목의 순서를 지어. 0이면 항목이 추가된 순서대로 나타남
- setIcon(Drawable icon) : 메뉴 항목의 아이콘을 icon으로 변경
- setAlphabeticShortcut(char alphaChar) : setShortcut()은 메뉴 항목의 단축키를 설정
# 컨텍스트 메뉴(context menu)
- 특정한 항목에 영향을 주는 동작을 제공
- 리스트 뷰, 그리드 뷰에서 사용
# 컨텍스트 메뉴 형태
1. 플로팅 컨텍스트 메뉴 : 사용자가 항목 위에서 오래 누르기 하면 메뉴가 대화 상자처럼 표시
2. 컨텍스트 액션 모드 : 현재 선택된 항목에 관련된 메뉴가 액션바에 표시. 여러 항목 선택하여 특정한 액션을 한 번에 적용 가능
# 옵션 메뉴와 컨텍스트 메뉴 차이
- 옵션 메뉴 : 메뉴의 소유주가 액티비티. 하나의 액티비티는 옵션 메뉴 하나만 가짐
- 컨텍스트 메뉴 : 소유주가 뷰. 뷰의 개수만큼 가질 수 있음
# 플로팅 컨텍스트 메뉴
- registerForContextMenu() : 뷰 객체를 인수로 전달하여 등록
- onCreateContextMenu() : 등록된 뷰가 오래 누르기 이벤트를 받으면 호출
ContextMenuInfo 객체는 선택된 항목에 대한 추가적인 정보 제공
- onContextItemSelected() : 사용자가 메뉴 항목을 선택하면 호출
# 컨텍스트 액션 모드
- 사용자가 뷰 위에서 오래 누르기 or 뷰 안의 체크 박스 선택 시 액션 모드 시작
- Back 버튼 or Done 버튼 누르면 액션 모드 사라짐
# 팝업 메뉴(popup menu)
- 특정한 뷰에 붙어있는 메뉴
- 오버플로우 스타일 메뉴
- 서브 메뉴의 역할
- 드롭 다운 메뉴
1. PopupMenu 클래스의 생성자로 팝업 메뉴 객체 생성. (생성자는 현재 애플리케이션 컨텍스트와 메뉴가 연결되는 앵커뷰를 인수로 받음)
2. MenuInflater를 이용하여 XML로 정의된 메뉴 리소스 PopupMenu.getMenu()가 반환하는 Menu 객체에 추가
3. PopupMenu.show() 호출
# 대화 상자(dialog)
- 사용자에게 메시지를 출력하고 사용자로부터 입력을 받아들임(cancel, set)
- 로그인 윈도우나 진행상황 보여줌
- 비동기적(액티비티의 실행이 중지되는 게 아님. 응답성 향상)
# 대화 상자 종류 (Dialog 클래스 상속)
- AlertDialog : 메시지와 선택 부분
- ProgressDialog : 다운, 실행시켰을 때 진행 상황
- DatePickerDialog : 날짜 선택
- TimePickerDialog : 시간 선택
# AlertDialog : 메시지와 선택 부분 (3가지 부분)
- 제목
- 콘텐츠 영역 : 메시지나 리스트(체크박스나 라디오 버튼), 커스텀 레이아웃 표시
- 액션 버튼 : 3개 이내의 버튼
- AlewrtDialog.Builder객체를 생성하고 메소드들을 호출하여 속성 지정하고 생성
- 버튼 눌렀을 때 확인하는 부분에 주로 사용
- setMessage() : 대화 상자에 표시되는 텍스트 메시지 설정. 빌더 객체 반환
- setPositiveButton(), setNegativeButton() : 버튼의 이름, 이벤트 처리하는 클릭 리스너 객체 생성하여 등록
- 동일한 버튼 타입 한 개만 가능(positvie, neutral, negative)
- setItem() : 선택 가능한 목록 가짐
- setMultiChoiceItems() : 체크 박스 추가
- setSingleChoiceItems() : 라디오 버튼 추가
# DatePickerDialog : 날짜 선택
- Calendar.getInstance() : 현재 시간 얻음
- YEAR, MONTH, DAY_OF_MONTH(년도, 월, 날짜)
- DatePickerDialog.OnDateSetListener()
- onDateSet(DatePicker view, int y, int m, int d)
# TimePickerDialog : 시간 선택
- Calendar.getInstance() : 현재 시간 얻음
- HOUR_OF_DAY, MINUTE (시, 분)
- TimePickerDialog.OnTimeSetLinsener()
- onTimeSet(TimePicker view, int hourOfDay, int minute)
# 커스텀 대화 상자
- 사용자가 마음대로 대화 상자의 내용을 디자인 가능
- 레이아웃 파일 생성 (custom dialog.xml)
- setContentView(id) 호출하여 대화 상자의 화면을 정의한 레이아웃으로 설정
# 알림 기능(notification)
- 어떤 이벤트가 발생하였을 때 앱이 사용자에게 전달하는 메시지
- 작은 아이콘 : 필수적. setSmallIcon()으로 설정
- 앱 이름 : 안드로이드에서 제공
- 알림 발생 시간 : 안드로이드에서 제공. setWhen()으로 재정의
- 큰 아이콘 : 선택 항목. setLargeIcon()으로 설정
- 제목 : 선택 항목. setContentTile()로 설정
- 텍스트 : 선택 항목. setContentText()로 설정
# 알림을 만드는 절차
1. 채널 생성
2. 알림 빌더 생성
3. 알림 속성 설정
4. 액션 첨부(선택 사양)
5. 알림 객체 생성하여 보냄
'전공 공부 > 안드로이드프로그래밍' 카테고리의 다른 글
액티비티와 인텐트 (0) | 2021.01.14 |
---|---|
고급 위젯과 프래그먼트 (0) | 2021.01.14 |
이벤트 처리 (0) | 2021.01.14 |
사용자 인터페이스 기초 (0) | 2021.01.14 |
애플리케이션 기본 구조 (0) | 2021.01.13 |