'Android'에 해당되는 글 47건

  1. 2012.08.01 안드로이드 리스트 뷰
  2. 2012.08.01 안드로이드 어댑터 뷰
  3. 2012.07.31 안드로이드 기본 위젯
  4. 2012.07.31 안드로이드 리소스, 에셋
  5. 2012.07.31 안드로이드 메뉴
728x90

리스트 뷰는 어댑터 뷰의 대표 위젯으로 수직으로 데이터를 보여줄 때 주로 사용된다.

전화번호목록, 최신통화목록, 문자 목록등 많은 양의 데이터를 수직으로 보여줄때 용이하다.

다른 위젯들 역시 동작 방식이 유사하므로 리스트 뷰만 재대로 익힌다면 나머지 위젯또한 쉽게 익힐 수 있다.

 

리스트 뷰를 사용하기 위해서는 3가지가 필요하다.

1.뷰 : 실제로 화면에 보여준다

2.어댑터 : 뷰와 데이터 사이의 중간 매개체 역할

3.데이터 : 보여줄 실제 데이터

 

main.xml

ListViewTestActivity.java

예제의 어댑터 부분을 보면 매개 변수 부분중에 android.R.layout.simple_list_item_1 부분이 있는데

우리가 res/layout 폴더안에 aaa.xml 파일을 만들면 자바코드에서 R.layout.aaa 형태로 사용이 가능하다. 마찬가지로 이미 안드로이드 sdk안에 만들어진 몇개의 xml 파일들이 있는데, 그 녀석들을 사용할때 android.R.xxx 형태로 쓰는것!
즉 위에서 사용된 android.R.layout.simple_list_item_1 이 부분은 " 안드로이드가 미리 만들어 놓은 레이아웃 중에 simple_list_item_1.xml 파일을 읽어와라" 라는 뜻이다.  

 

그외 ListView에서 사용되는 기본 레이아웃들.

 

 정의되어 있는 xml 파일

 설명

 simple_list_item_1

 텍스트 뷰 하나로 구성된 레이아웃

 simple_list_item_  텍스트 뷰 두개로 구성된 레이아웃
 simple_list_item_checked  오른쪽에 체크 표시가 된다

 simple_list_item_single_choice

 오른쪽에 라디오 버튼이 나온다
 simple_list_item_multiple_choice  오른쪽에 체크 버튼이 나온다

 

데이터 부분을 xml 로도 선언 가능하다

 

/res/values/arrays.xml

<?xml version=“1.0” encoding=“utf-8”?>

<resources>

        <string-array name=“listitems”>

                <item>Java</item>

                <item>Jsp</item>

                <item>Ejb</item>

                <item>Android</item>

                <item>자바</item>

                <item>안드로이드</item>

                <item>스프링</item>

                <item>스트럿츠</item>

        </string-array>

</resources>


코드수정

ArrayList<String> dataArr = new ArrayList<String>();

     dataArr.add("JAVA");

     dataArr.add("JSP");

     dataArr.add("EJB");

     dataArr.add("ANDROID");


     ArrayAdapter<String> Adapter = new ArrayAdapter<String>  (this, android.R.layout.simple_list_item_1, dataArr);


위의 부분을 아래와 같이 수정.

ArrayAdapter<CharSequence> Adapter = 

ArrayAdapter.createFromResource(this, R.array.country, android.R.layout.simple_list_item_1);

특별히 달라진건 없지만 자바코드의 양이 줄었다.

 

데이터가 수시로 추가되고 삭제되고 변경이 자주 생긴다면 자바코드에서 데이터를 만들고

데이터의 변경 값이 일정하다면 xml 상에 데이터를 만드는 것이 편리하다

 

대표적으로 많이 쓰는 ListView의 속성

1. android:divider 

  - 항목 사이사이의 구분선을 설정한다. RGB로 색상을 지정하거나 Drawable로 설정가능하다.


2. android:dividerHeight

  - 구분선의 높이를 설정한다.


3. android:entries

 - 리스트뷰에 표시할 배열을 지정한다. static 배열이라면 이녀석으로 사용이 가능하다.


4. android:footerDividersEnabled

 - 만약에 false로 설정을 하면 리스트뷰의 바닥뷰(footer View)를 보기 전까지 구분선을 그리지 않는다. 기본값은 true.


5. android:headerDividersEnabled

 - 만약에 false로 설정을 하면 리스트뷰의 헤더뷰(header view)를 본 후에 구분선을 그리지 않는다. 기본값은 true.


6. android:choiceMode

 - 항목 선택 모드를 결정한다. 아래의 모드를 통해 1개 또는 여러개의 선택이 가능하다.

 

 속성값(xml 사용)

 java 파일에서 사용할때 변수 값

설명

 none

 CHOICE_MODE_NONE

 항목 선택이 불가능

 singleChoice  CHOICE_MODE_SINGLE  항목 하나를 선택 가능
 multipleChoice  CHOICE_MODE_MULTIPLE  항목 여러개를 선택 가능

728x90
Posted by 정망스
,
728x90

어댑터 뷰(AdapterView)는 같은 종류의 뷰들을 특정한 방식으로 반복해서 보여주는데 적합하며,

ListView, GridView, Gallery, Spinner가 뷰 컨테이너 위젯에 속한다.

 

ListView

뷰 객체들을 수직 방향의 목록 형태로 보여준다. 수직 스크롤을 지원하며 일반적으로 목록의 각 항목은 자료를 담은 뷰이고, 사용자는 목록의 한 항목을 선택해서 일정한 작업을 수행한다.
GridView 
뷰 객체들을 고정된 개수의 열들로 이루어진 격자(Grid) 형태(2차원의 표 형태)로 배치한다. 격자의 각 칸에 이미지 아이콘이 배치되는 경우가 많으며 사용자는 한 항목을 선택해서 일정한 작업을 수행한다.
Gallery
뷰 객체들을 수평 방향의 목록 형태로 표시한다. 수평 스크롤을 지원하며 이미지를 표시하는데 흔히 쓰인다. 사용자는 한 항목을 선택해서 일정한 작업을 수행한다.
Spinner
목록을 표시한다는 면에서 리스트뷰와 용도가 동일하나 ListView는 항상 펼쳐져 있는데 비해 Spinner는 클릭할 때만 팝업으로 펼쳐진다. 흔히 콤보박스라고 부르는 컨트롤이 바로 Spinner 위젯이며 화면이 좁은 모바일 환경에서 면적을 적게 차지하는 장점이 있지만 목록을 보려면 팝업을 열어야 하는 단점이 있다.

 

모든 위젯의 공동 조상인 AdapterView는 ViewGroup으로 부터 파생되므로 어댑터 뷰는 항복에 해당하는 여러 개의 차일드 뷰를 가질 수 있다 뿐만 아니라 linear, relative 같이 배치만 담당하는 레이아웃과는 달리 사용자와 상호 작용도 처리하므로 터치나 키패드로 항목을 선택할 수도 있다.

 

위의 위젯들을 adapter View 라고 부르는 이유는 표시할 항목 데이터를 adapter 객체로부터 공급받기 때문이다. 항목의 개수는 이론적으로 무한대일 뿐만 아니라 실행 중에 목록이 바뀔 수도 있으며 데이터의 원본도 다양하다. 이런 복잡한 데이터를 위젯이 직접 처리하는것은 효율적이지 못하므로 두 객체가 협동적으로 동작한다.

adapter은 원본으로부터 얻은 데이터를 관리하며 adapterView는 adapter가 전달한 데이터를 화면에 표시한다.

위젯과 연결될 수 있는 adapter들의 계층은 아래 그림과 같다.

 

 

최상위의 Adapter 인터페이스는 AdapterView와 데이터 간의 연결을 제공하고 항목의 집합을 관리하는 기본적인 method를 선언한다.

Adapter로부터 두 개의 인터페이스가 파생되는 데 ListAdapter와 SpinnerAdapter interface이다.

 

ListAdapter : ListView와 연결에 필요한 method를 정의한다.

SpinnerAdapter : Spinner와 연결에 필요한 method를 정의한다.

둘다 인터페이스이기 때문에 method가 구현되어 있지는 않다.

추상클래스 BaseAdapter에서 위에 두 interface의 method 중 기본적인 것을 구현한다.

또 BaseAdapter의 파생 클래스가 있는데 이 클래스들은 항목의 원본이 어디인가에 따라 아래처럼 나누어진다.

 

ArrayAdapter : 객체 배열이나 리소스에 정의된 배열로부터 데이터를 가져온다.

CursorAdapter : 데이터 베이스로부터 데이터를 공급받는다.

SimpleAdapter : xml 파일의 정적인데이터를 원본으로 사용한다.

 

어떠한 경로든 Adapter는 원본에서 구한 데이터로 뷰를 만들 책임이 있으며 adapter가 제공하는 View는 AdapterView에 항복 하나로 표시된다.

728x90

'Android' 카테고리의 다른 글

안드로이드 리스트뷰 추가 삭제  (0) 2012.08.01
안드로이드 리스트 뷰  (0) 2012.08.01
안드로이드 기본 위젯  (0) 2012.07.31
안드로이드 리소스, 에셋  (0) 2012.07.31
안드로이드 메뉴  (0) 2012.07.31
Posted by 정망스
,
728x90

안드로이드의 기본 위젯의 종류에는 다음과 같은 것들이 있다.

 

레이블,버튼,이미지,입력필드,체크박스,라디오버튼,뷰...

 

1.레이블

 

안드로이드에서 레이블은 TextView 클래스로 구현된다.

일반 GUI 툴킷처럼 레이블은 고정된 텍스트를 화면에 표시한다.

 

속성에는 다음과 같은것들이 있다.

 

android:text - 표시할 글을 지정

android:typeface - 글꼴 종류를 지정

android:textStyle - bold(굵은),italic(기울인),bold l italic(굵고 기울인) 글꼴 지정

android:textColor - 텍스트의 색깔을 지정

 

2.버튼

 

버튼은 TextView 클래스를 상속 받는다.

 

결국 버튼에서도 TextView의 모든 인터페이스가 사용 가능하다.

 

3.이미지

 

안드로이드에서 이미지를 간단하게 올릴 수 있는 방법으로 두가지 위젯을 제공한다.

 

ImageView 클래스와 ImageButton 클래스가 있다.

 

두 클래스 모두 android:src 속성으로 어떤 이미지를 사용할 지 지정해야 한다.

보통 이미지의 내용은 대부분 res/drawable 디렉토리에 들어간다.

 

외부 컨텐트의 경우 setImageUri() 메소드로 지정도 가능하다.

 

지원되는 포맷은 PNG, JPEG, GIF 등이다.

 

4.입력 필드

 

버튼, 레이블과 함께 입력필드 역시 GUI 툴킷의 핵심이다,

안드로이드 SDK 에서는 EditText라는 클래스로 구현되어 있다.

 

EditText 역시 TextView의 하위 클래스이므로 TextView 클래스의 인터페이스를 사용가능하다.

 

또 다음과 같은 속성도 추가적으로 가지고 있다.

 

android:autoText - 자동 철자 교정 기능 사용 유무

android:capitalize - 입력된 텍스트 첫글자를 대문자로 할 것인지

android:digits - 특정 숫자만 입력받게 제한 할지의 여부

android:singleLine - 한 줄자리 텍스트, 도는 여러줄 짜리 입력인지 결정

 

5.체크 박스

 

CheckBox 역시 TextView 클래스의 하위 클래스로 TextView의 인터페이스 모두를 사용할 수 있다.

또 CheckBox의 속성은 자바에서 다음과 같은 메소드로 활용 가능하다.

 

isChecked() - 현재 체크되었는가 여부

setChecked() - 체크박스의 상태지정

toggle() - 체크박스의 체크 상태 변경

 

CheckBox의 상태에 따라 다른 행동을 취하고 싶다면 이벤트 리스너를 달아야한다

이때 사용하는 인터페이스는

CompoundButton.OnCheckedChangeListener() 이다.

 

CompoundButton 역시 CheckBox의 상위 클래스이다.

 

6.라디오 버튼

 

안드로이드 SDK의 라디오 버튼 역시 체크박스처럼 두개의 상태를 가지고 버튼 여러개를 그룹으로 묶어 하나만 선택 가능하게 할 수 있다.

 

라디오 버튼 역시 CompoundButton 클래스를 상속 받았고, 더 상위에서는 TextView 클래스를 상속받았다.

 

따라서 TextView 클래스의 인터페이스를 사용 가능하며 체크박스처럼 isChecked() 메소드 등이 사용가능하다.

 

RadioButton 클래스는 여러개의 인스턴스를 RadioGroup 클래스로 묶어서 사용한다.

 

각 RadioButton 마다 아이디를 지정하면 다음과 같은 자바코드로 라디오 버튼값 확인이 가능하다.

 

check() - 특정 ID의 라디오 버튼 체크

clearCheck() - 특정 ID의 라디오 버튼 체크해제

getCheckedRadioButtonId() - 현재 선택된 라디오 버튼 아이디 반환

 

7. 뷰

 

지금까지 살펴본 위젯은 모두 View 클래스를 상속받는다.

View 클래스는 개별 위젯에서 소개하지 않은 여러가지 유용한 기능이 있다.

 

//입력포커스 관련

android:nextFocusDown

android:nextFocusLeft

android:nextFocusRight

android:nextFocusUp

 

//화면 표시 여부

android:visibility

 

//배경 색

android:background

 

//자바에서의 유용한 메소드

//특정 위젯 사용여부

inEnabled() - 사용 가능 여부

setEnabled() - 사용 여부 설정

 

//포커스 변경

requestFocus() - 입력포커스를 해당 위젯으로 옮겨옴

isFocused() - 포커스를 갖고 있는지

setFocus() - 포커스 설정

 

//위젯과 컨테이너 검색

getParent() - 상위 위젯 알려줌

findViewById() - 아이디에 해당하는 위젯을 찾아줌

getRootView() - 최상위 컨테이너를 찾아줌

 

 

728x90

'Android' 카테고리의 다른 글

안드로이드 리스트 뷰  (0) 2012.08.01
안드로이드 어댑터 뷰  (0) 2012.08.01
안드로이드 리소스, 에셋  (0) 2012.07.31
안드로이드 메뉴  (0) 2012.07.31
안드로이드 입력 (이벤트) 4  (0) 2012.07.31
Posted by 정망스
,
728x90

리소스는 매우 중요한 부분으로써, 일반적으로 참조하고자 하는 이미지, 오디오, 비디오, 문자열, 테마, 레이아웃 등과 같은 외부 요소들로 이루어진다. 즉 프로그램의 외형을 장식하는 역할을 한다.

 

모든 안드로이드 어플리케이션은 리소스 디렉토리(res/) 와 에셋 디렉토리(asstes/)를 가진다.

 

일반적으로 에셋보다는 리소스를 주로 사용한다. 이유는 안드로이드의 R 클래스를 통하여 쉽게 참조가 가능하기 때문이다.

 

리소스 생성

 

리소스는 많은 타입의 리소스를 지원하며, 각각의 포맷, 저장되는곳 들은 그 객체의 타입에 따라 다르다.

 

일반적으로는 아래 세 개의 타입으로 리소스를 만들면 된다.

 

1.XML파일 (비트맵, 원시 파일을 제외한 모든 것)

2.비트맵 파일 (이미지 등)

3.원시(raw) 파일 (사운드 파일 같은)그외 모든것들

 

프로젝트 내의 res 디렉토리 아래 또는 그 하위에 리소스 파일을 저장하며, 리소스가 위치하는 하위 폴더와 파일 포맷에 따라 그것들을 컴파일하는 리소스 컴파일러(aapt)를 가지고 있다.

 

 

리소스는 최종적으로 .apk 파일내에 컴파일이 되며 R 이라는 래퍼 클래스를 통해 리소스들을 참조할 수 있게 해준다. R 클래스는 파일 경로와 그에 따르는 서브클래스를 포함하고 있다.

 

리소스 타입

res/anim : 애니메이션 방식을 정의하는 xml 파일을 저장

res/drawable : 이미지 파일, 도형을 정의하는 xml 파일 등을 저장

res/layout : 화면의 레이아웃을 저장한다. 뷰 그룹과 뷰 파생 클래스의 배치 상태가 레이아웃에 기록된다.

res/values : 문자열,색상,배열,크기,스타일(strings.xml, colors.xml, arrays.xml, dimens.xml, styles.xml) 등 여러 가지 값들을 정의하는 xml 파일이 이 폴더에 배치된다.

res/xml : 실행 중에 읽어서 사용할 임의의 xml 파일을 저장

res/raw : 임의의 이진 파일이 저장

 

리소스 사용

리소스는 컴파일 시점에서 시스템은 프로그램에 있는 모든 리소스에 대한 식별자를 포함하는 R 클래스를 생성한다.

 

R 클래스는 자동으로 생성되며 ,빌드 시점에 자동으로 갱신되기 떄문에 절대로 편집하지 않아야 한다.

 

아래는 R 클래스의 구조

코드에서 리소스 사용

코드에서 리소스를 사용하려면, 리소스 ID와 리소스 타입을 알아야 한다.

 

R.resourceType.resourceName 형식 : 직접 생성한 리소스를 참조 할때

android.R.resourceType.resourceName : 미리 정의되어 있는 안드로이드 내의 리소스를 참조 할떄

 

리소스 타입은 R 클래스의 서브 클래스가 되며, 리소스 명은 xml에 정의된 속성이거나 다른 파일 타입에 의해 정의된 리소스의 파일 이름이다, 리소스 타입은 알맞게 R 클래스의 서브 클래스로써 추가 되어 진다.

 

직접 생성한 어플리케이션 내의 리소스는 패키지 이름 없이 참조한다. ex) R.XXX.XX

안드로이드에 미리 정의된 표준 리소스는 ex)android.R.XX.XXX , android를 붙여야 한다.

 

리소스 참조하기

속성 또는 리소스로 제공되는 값도 참조할 수가 있다.

예를들어 색상값을 지정한 리소스가 있다면 레이아웃에서 참조하여 색상 지정을 할수가 있다.

 

 

 

리소스 참조를 위해 제일 앞에 @ 문자가 있다, 그다음 텍스트는 @[package:] type/name 형식이며

위 소스에서는 해당 패키지 내부에서 리소스를 참조하는 것이기 때문에 패키지를 지정하지 않았다.

 

 

시스템 리소스 참조를 위해서는 위에서 말한것 처럼 패키지 이름을 써야한다.

 

 

문자열도 리소스로 관리하면 유용하다.

 

 

리소스 상호간에도 리소스를 참조할 수가 있는데 이미 존재하는 이미지에 대해 새로운 드로블 리소스를 만들면 된다.

 

테마 속성 참조하기

 

현재 적용되어 있는 테마의 속성값을 참조하기 위해서는 스타일 리소스와 XML 속성에서만 사용 가능하다.

즉 구체적인 값 대신에 현재 테마를 변경하여 UI를 커스텀하는 방식이다, 예로는 레이아웃에서 기본 시스템 테마의 표준 색상값 중 하나를 참조하여 텍스트 컬러를 지정하는 것과 같은 예가 있다.

 

 

여기서 주의 있게 봐야 할 곳은 @ 대신에 ? 을 사용한다는 것이다.

이떄 테마에서 찾을 속성의 이름을 제공해야 한다. 테마에서 값을 찾는 ? 를 사용하는 것을 제외하면 나머지는 @를 사용하는 구문과 동일하다.

 

시스템 리소스 사용하기

 

이것은 어플리케이션 소스에서도 사용이 가능하다, 이러한 리소스들은 모두 android.R 이라는 클래스에 정의 되어 있다.

 

 

 

728x90

'Android' 카테고리의 다른 글

안드로이드 어댑터 뷰  (0) 2012.08.01
안드로이드 기본 위젯  (0) 2012.07.31
안드로이드 메뉴  (0) 2012.07.31
안드로이드 입력 (이벤트) 4  (0) 2012.07.31
안드로이드 입력 (이벤트) 3  (0) 2012.07.31
Posted by 정망스
,

안드로이드 메뉴

Android 2012. 7. 31. 21:58
728x90

안드로이드에서 사용하는 메뉴는 크게 3가지로 나뉜다.

 

1.옵션 메뉴

사용자가 메뉴버튼을 누르면 화면에 나타난다. 최대 6개의 항목을 가질수 있으며 6개가 넘으면 5개까지 나타나고 6번째는 More항목이 나타나고 나머지는 숨겨지게 된다.

More항목을 클릭하면 숨겨진 나머지 메뉴들이 확장메뉴 형태로 나타난다.

아이콘으로 꾸미기는 가능하나, 체크박스, 라디오 그룹을 사용할 수는 없다.

 

2.컨텍스트 메뉴

화면을 꾹 누르고 있으면 나타나는 메뉴이다. 화면의 중앙에 나타난다.

아이콘을 추가 할수는 없지만 체크박스나 라디오 그룹을 사용할 수 있다.


3.서브 메뉴

옵션메뉴나 컨텍스트 메뉴에 추가적인 항목을 넣을때 사용되며 서브메뉴에 서브메뉴 추가는 불가능.

 


1.옵션메뉴

 

옵션메뉴를 생성하기 위해서는 아래 3가지 메소드를 재정의 해야한다.

 

public boolean onCreateOptionsMenu (Menu menu)

 - 메뉴 버튼을 눌렀을때 시스템에 의하여 자동적으로 호출되는 메소드

    매개변수로 빈 메뉴객체인 menu에다가 원하는 항목을 추가 하면 된다.


public boolean onPrepareOptionsMenu (Menu menu)
 - 메뉴가 열릴 때마다 호출되는 메소드, 동적으로 메뉴를 추가하거나 삭제가 가능.
   사용하는 메뉴가 고정된 형태라면 굳이 사용할 필요는 없다.


public boolean onOptionsItemSelected (MenuItem item)

 - 메뉴항목을 선택했을때 호출되는 메소드

   매개변수로 넘어온 item은 사용자가 선택한 메뉴 항목이다

 

MenuTestActivity.java

main.xml

 

Menu, 클래스에 대해서.


MenuItem add(int groupId, int itemId, int order, ChatSequence title)


MenuItem addSubMenu(int groupId, int itemId, int order, int title)


위의 2개의 메소드가 주로 사용되며 이름에서 알수 있듯이 메뉴아이템을 추가하거나 서브메뉴를 추가할때 사용되는 메소드
- groupId : 항목에 그룹을 지정할때 사용하는 그룹번호

- itemId : 해당 아이템의 고유한 식별자

- order : 배치되는 순서 (동일한 값을 넣으면 순서대로 추가된다.)

- title : 항목에 보여지는 문자열. 리소스 형태로 넣을수도 있고 문자열 형태로 넣을수도 있다.

 

MenuItem 클래스에 대해서.


MenuItem setChecked(boolean checked) - 체크여부를 결정

MenuItem setEnabled(boolean enabled) - 항목의 사용가능 여부 결정

MenuItem setIcon(int iconRes) - 항목의 아이콘을 설정

MenuItem setNumericShortcut(char numericChar) - 숫자 단축기 지정

MenuItem setShortcut(char numericChar, char alphaChar) - 문자나 숫자 단축키 지정

MenuItem setTitle(CharSequence title) - 항목의 문자열을 지정

MenuItem setVisible(boolean visible) - 항목의 보여짐 상태를 설정


메소드들을 보면 모두 MenuItem을 리턴하고 있다. 그렇기 때문에 다음과 같이 2가지 형태로 사용가능 하다.


MenuItem menuItem = menu.add("하이");

menuItem.setIcon(R.id.xxxxxx);

menuItem.setTitle("테스트 항목");


menu.add("하이").setIcon(R.id.xxxxxx).setTitle("테스트입니다.")

 

2.컨텍스트 메뉴

 

컨텍스트 메뉴는 옵션 메뉴와 거의 동일하다. 하지만 옵션메뉴처럼 메뉴버튼에 자동 등록된 녀석이 아니라 원하는 뷰마다 사용가능한 녀석이기 때문에 "" 이라는 메소드가 하나 추가되어 있다.

 

컨텍스트 메뉴를 생성하기 위해서는 아래 4가지 메소드를 재정의 합니다.


public void registerForContextMenu(View view)

 - 특정 뷰에 컨텍스트 메뉴를 추가하고자 할때 매개변수로 등록하고자 하는

    뷰를 넣어 메소드를 호출한다. 필요하다면 여러개 뷰의 등록도 가능하다.


public boolean onCreateContextMenu (ContextMenu menu, View v,

                ContextMenu.ContextMenuInfo menuInfo)

 - 특정 뷰를 컨텍스트메뉴로 등록하였하면 해당 뷰를 롱클릭하면 onCreateContextMenu가 자동 호출된다. 복수의 등록이 가능하므로 2번째 매개변수를 통해 이벤트가 발생한 View를 알수 있으며 3번째 매개변수를 표시해야 할 아이템의 추가적인 정보를 담고 있습니다.

   이 정보는 매개변수 v 에 따라 매우 다양하게 제공된다. 옵션메뉴와 다른 점은 이 메소드는 컨텍스트 메뉴가 사용될 때마다 호출된다는 점이다. 그렇기 때문에 옵션메뉴에 있던 onPrepareOptionsMenu() 가 컨텍스트메뉴에는 필요하지 않다.


public boolean onContextItemSelected (MenuItem item)

 - 컨텍스트 메뉴의 항목을 선택했을때 호출되는 메소드.

   매개변수로 넘어온 item은 사용자가 선택한 메뉴 항목이다.


void onCreatecontextMenu(ContextMenu menu)

 - 자신이 필요한 컨텍스트메뉴를 개별적으로 재정의 하여 사용한다.

 

MenuTestActivity02.java

main.xml

 

3.서브메뉴

 

서브 메뉴는 OptinosMenu와 ContextMenu에서 공통적으로 사용되는 메뉴이다.

일반적으로 두메뉴의 하위에 구성된 메뉴를 말한다. 기존에 작성한 메뉴들은 사용자가 메뉴항목을 선택하면 onXXxxxxxItemSelected() 메소드가 호출되어 해당 메소드에서 정의된 작업을 수행하게 되지만 Sub Menu로 구성된 항목을 선택하면 또다른 메뉴가 리스트 형태로 출력이 된다.

서브메뉴는 다른 메뉴들과는 다르지만 독립적으로 관리되는 것이 아니라 일반메뉴에 포함된 형태로 여겨지기 때문에 코드상에 모두 작성하면 된다.

 

서브메뉴에 서브메뉴를 추가하면 실행시 아래와 같은 에러가 발생합니다.

E/AndroidRuntime( 9248): java.lang.UnsupportedOperationException: Attempt to add a sub-menu to a sub-menu. 

 

MeunTestActivity03.java

main.xml

728x90

'Android' 카테고리의 다른 글

안드로이드 기본 위젯  (0) 2012.07.31
안드로이드 리소스, 에셋  (0) 2012.07.31
안드로이드 입력 (이벤트) 4  (0) 2012.07.31
안드로이드 입력 (이벤트) 3  (0) 2012.07.31
안드로이드 입력 (이벤트) 2  (0) 2012.07.31
Posted by 정망스
,


맨 위로
홈으로 ▲위로 ▼아래로 ♥댓글쓰기 새로고침