달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2010. 4. 5. 13:24

'10.04.05 Story Android 이야기2010. 4. 5. 13:24

환경설정

안드로이드는 액티비티에서 장기간 사용할 데이터를 보관할 수 있는 방법을 제공한다. 그 중에 가장 간단한 방벙은 환경설정 부누

안드로이드 액티비티와 같은 애플리케이션은 Map처럼 키/값 형태로 환경설정 내용을 보관할 수 있으며, 물론 액티비티가 종료되거나 실행되는 상태에 상관없이 지속적으로 유지된다.

환경설정에 보관된 내용은 특정 액티비티에서만 사용할 수 있고, 아니면 애플리케이션에 보관된 전체 액티비티가 함계 공유할 수도 있다.

 

원하는 값 추출

원하는 값을 추출하려면 다음과 같은 3종류의 메소드를 사용할 수 있다.

 

Activity의 getPreferences() 메소드를 호출. 액티비티별 환경설정을 가져올 수 있다.

Activity의 getSharedPreferenes()메소드를 호출한다. 또는 애플리케이션 Context의 getSharedPreferences()메소드를 호출한다. 애플리케이션 수준의 환경을 가져올 수 있다.

PreferencesManager클래스의 getDefaultSharedPreferences()메소드를 호출한다. 안ㄷ로이드 전체 환경설정 프레임웍에 해당하는 환경설정을 가져온다.

getDefaultSharedPreferences()메소드 호출시에는 반드시 Context 인스턴스를 전달해야 한다.

(예를 들면 Activity도 Context의 하위 클래스이므로 Activity를 넘겨도 된다)

위의 세가지 메소드 모두 결과로 SharedPreferences인스턴스를 리턴. SharedPreferences클래스는환경설정 항목의 이름을 넘겨주면 각 자료형별 값을 리턴하는 다양한 메소드를 갖고 있다.(다양한 get메소드)

 

환경설정 관리

SharedPreferenes인스턴스를 확보하고 나면 edit()메소드를 호출해 SharedPreferences.Editor라는 편집용 환경설정 객체를 생성할 수 있다. SharedPreferences.Editor클래스에는 다양한 종류의 set메소드가 준비돼있으며, 각 set메소드는 원본 SharedPreferences클래스의 동일한 기능과 연결된다.

추가적으로 다음과 같은 편집용 메소드도 있다.

remove()메소드 : 특정 환경설정 항목을 제거한다

clear() 메소드 : 모든 환경설정 항목을 제거한다.

commit()메소드 : Editor객체에 반영된 변경사항을 원본 SharedPreferences 객체에 반영한다.

 

내용을 변경하고 commit()메소드를 호출하지 않으면 변경내용이 반영되지 않는다.

 

환경설정 XML

애플리케이션에서 사용할 환경설정을 XML 파일 형태로 작성한 다음 프로젝트의 res/xml/ 디렉토리에 넣어두자.

 

환경설정 기능 제공

환경설정 내용을 XML로정의했다면, 프로젝트가 생성될 때 자동으로 만들어진 자바 코드를 '거의'그대로 사용하기만 해도 사용자가 환경설정을 할 수 있는 프로그램이 완성된다.

'거의'라고 표현한 이유는 기본 액티비티 대신 환경설정 관련 액티비티를 상속받도록 변경해야 하고, 이렇게 작성한 환경설정 액티비티를 애플리케이션의 다른 액티비티와 연결하는 작업이 필요하기 때문이다.

 

addPreferencesFromResource()메소드를 호출하면서 환경설정을 정으했던 XML리소스를 넘겨주기만 하면 된다. 그리고 AndroidManifest.xml파일에 EditPreferences액티비티를 다음과 같이 추가해야 한다.

 

모양새 갖추기

안드로이드 환경설정 프레임웍에서는 분류나 스크린과 같은 개념을 도입해 다수의 환경설정 항목을 손쉽게 관리할 수 있도록 몇 가지 방법을 추가로 제공한다

분류는 환경설정 XML에 PrefereneCategory 엘리먼트 형태로 추가할 수 있으며, 서로 관련된 환경설정 항목을 하나의 그룹으로 묶어 표시할 때 사용한다. 다시말해 모든 환경설정 항목을 하나의 PreferenceScreen아래에 모두 나열하는 대신에 PreferenceCategory를 넣고 그 아래에 실질적인 세부항목은 PreferencyCategory 아래에 위치시킨다는 뜻이다. 그러면 화면으로 볼때 항목을 분류별로 구분하고, 그 사이마다 분류 제목이 구분선 형태로 추가된 모습으로 나타난다.

<PreferenceScreen

xmlns:android ="http://schemas.android.com/apk/res/android">

 

<PreferenceCategory>

<CheckBoxPreference></CheckBoxPreference>

<RingtonePreference></RingtonePreference>

</PreferenceCategory>

<PreferenceScreen>

<CheckBoxPreference></CheckBoxPreference>

</PreferenceScreen>

</PreferenceScreen>

 

<PreferenceCategory android:title = "추가 설정">

<EditTextPreference

android:key = "@string/text"

android:title="텍스트 입력 환경설정"

adnroid:summary = "클릭해서 데이터를 입력해주세요"

android:dialogTitle = "텍스트 입력"/>

<ListPreference

android:key = "list"

android:title = "선택대화상자"

android:summary = "클릭해서 목록 항목을 선택해주세요"

android:entries = "@array/cities"

android:entryValues = "@arry/airport_codes"

android:dialogTitle = "펜실도니아 도시를 선택하세요"/>

</PreferenceCategory>

 

먼저 입력 필드 항목(EditTextPreference)을 보면 환경설정 항목 자체에 들어가는 이름과 설명을 지정할 수 있고, 그 외에 대화상자의 제목도 지정할 수 있다. 목록 항목엔 대화상자 제목뿐만 아니라 두 개의 문자열 리소스를 지정해야 하는데, 하나는 목록에 들어가는 개별 항목의 제목이고, 또 하나는 개별항목의 값이다.

 

파일

안드로이드가 환경설정이나 데이터베ㅣㅇ스와 같은 구조화된 데이터 보관 방법을 제공하긴 하지만, 단순한 파일이 가장 간편할 때가 있다.안드로이드에서 파일을 사용하는 경우는 두 가지로 나눠볼 수 있는데, 하나는 애플리케이션 패키지에 함께 묶인 파일을 사용하는 경우이고, 다른 하나는 애플리케이션 실행 도중 필요할 때에 생성한 파일을 사용하는 경우다.

 

고정된 파일

예를 들어 맞춤법 검사기능이 있는 애플리케이션에서 사용할 기본적인 단어 사전 파일과 같이 애플리케이션을 배포할 때 고정적인 내용을 담은 특정 파일을 함께 배포해야 할 필요가 있다. 이처럼 고정 파일을 함계 배포할 때 가장 간단한 방법은 해당 파일은 res/raw 디렉토리에 넣어두는 방법이다. 그러면 안드로이드에서 따로 처리하지 않고 애플리케이션과 함께 배포된다.

res/raw 디렉토리에 들어있는 파일을 사용하려면 Resouces객체를 통해야 하는데, 액티비티 내부에서 getResources()메소드를 호출하기만 하면 Resources인스턴스를 받아올 수 있다. Resources 객체의 openRawResource()메소드를 호출하면 해당 파일 내용을 읽는 InputStream을 생성해 준다. 일단 여기서 InputStream만을 확보할 수 있기 때문에 파일에 원하는 내용을 적을 수 없다.

 

InputStream in = getResources().openRawResource(R.raw.words);

DocumentBuilder builder = DocumentBuilderFactory

.newInstance()

.newDocumentBuilder();

Document doc = builder.parse(in , null);

NodeList words = doc.getElementsByTagName("word");

for(int i=0; i<words.getLength(); i++){

items.add((Element)words.item(i)).getAttribute("value");

}

in.close();

 

InputStream in = getResources().openRawResource(R.raw.words);

이 구문으로 inputStream을 확보한 다음 안드로이드에 내장된 XML파서를 이용해 DOM구조의 Document객체로 변환하고, word엘리먼트를 모두 추려낸다음 ArrayList에 쌍ㅎ아서 ArrayAdapter에 넘겨준다

 

 

'Android 이야기' 카테고리의 다른 글

'10.04.06 Story  (0) 2010.04.06
'10.04.05 story 안드로이드 2주차 과제  (0) 2010.04.05
'10.04.04 Story  (0) 2010.04.05
내 생각 안드로이드 이야기2  (0) 2010.04.05
내 생각 안드로이드  (1) 2010.04.01
:
Posted by НooпeУ


Code Start Code End