android - 해당되는 글 8건
크리에이티브 커먼즈 라이선스
Creative Commons License

안드로이드에서 SharedPreference를 이용하면 어플리케이션에 연관된 간단한 데이터(String, int, boolean, 등등)들을 쉽게 파일시스템에 저장하고 가져올 수 있습니다.

데이터는 항상 키와 값으로 저장됩니다. 키를 통해서 데이터를 저장하고 또 가져올 수 있습니다.

데이터 가져오기

SharedPreferences prefs = getSharedPreferences("PrefName", MODE_PRIVATE);
String account = prefs.getString("key_account", "");
boolean bool_data = prefs.getBoolean("key_bool", true);

Context.getSharedPreferences함수를 통해서 SharedPreferences 인스턴스를 가져옵니다. getString, getBoolean, getInt등을 통해 첫번째 인자는 키를 주고 두번재 인자는 디폴트값입니다. 만약 해당 키에 대한 데이터가 존재하지 않는 경우 디폴트값을 리턴해줍니다.

데이터 저장하기

SharedPreferences.Editor editor = prefs.edit();
edit.putBoolean("key_bool", bool_data);
edit.putString("key_string", string_data);
edit.commit();

데이터를 저장하기 위해서는 SharedPreferences.Editor인스턴스를 edit()함수를 통해 가져옵니다. 그리고 putString, putInt, putBoolean등을 통해 데이터를 저장한 후 반드시 commit()을 호출해주어야 실제로 파일에 저장이 됩니다.

SharedPreference로 저장된 xml파일은 DDMS의 File_Explorer data-data-package-shared-prefs아래에 위치합니다.

저작자 표시
신고

'Study > Android' 카테고리의 다른 글

[Android: SharedPreference]  (0) 2011.04.05
[Android: Web Parsing]  (0) 2011.04.04
[Android: CustomView]  (0) 2011.03.29
[Android: ListView]  (0) 2011.03.28
[Android: Activity만들기]  (0) 2011.03.23
[Android: Media Scanner]  (0) 2011.03.23
Trackback 0 | Comment 0
크리에이티브 커먼즈 라이선스
Creative Commons License
일반적으로 Java platform에서는 세가지 정도의 XML 파서가 유명하다고 한다. Java's Simple API for XML(SAX), Documnet Object Model(DOM), Streaming API for XML(StAX) 가 그것들이다. 하지만 안드로이드에서는 마지막 StAX는 지원하지 않으며, SAX와 DOM은 완벽하게 지원하고 있다.

SAX는 상당히 빠른 속도에 메모리 사용량도 극히 작은 API로 event-driven으로 동작한다. XML 문서에서 각각의 태그를 만날때 마다 해당하는 EventListener가 떠서 파싱이 이루어진다. 특히 기존 Java 프로그램에서 사용하는 것과 동일한 형태로도 사용할 수 있으며, 안드로이드 SDK에서 지원하는 좀더 단순한 형태로 사용할 수도 있다.

DOM 역시 안드로이드에서 완벽하게 지원된다. SAX와 마찬가지로 기존 Java 프로그램에서 사용하는 것과 동일한 형태로 어떠한 변환없이 사용할 수 있다. DOM의 경우엔 XML 문서를 한꺼번에 모두 메모리로 읽어 놓고 DOM API를 이용해서 필요한 부분 어디로든지 검색할 수 있기 때문에 XML 문서의 크기가 크다면 모바일 환경에서 사용하기엔 약간 무리가 따른다. 하지만 XML 문서가 단순하다면 아주 간단하게 XML을 파싱하는 방법을 제공한다.

다음으로 안드로이드에서는 StAX와 비슷하게 동작하는 XmlPullParser를 지원한다. 속도는 SAX보다 약간 느리며 메모리 사용량은 비슷하다고 한다. 동작 역시 SAX와 비슷하긴 하지만 사용자가 직접 항목의 값을 가져오는 pull 방식을 취한다. (반대로 SAX의 경우는 push방식으로 볼수 있다.) 특히 XML문서의 모든 내용을 파싱하지 않고 필요한 부분까지 파싱한 후에 파싱을 끝낼 수 있기 때문에 XML문서에서 일부만 가져와서 작업을 해야할 경우엔 SAX보다 더 빠르고 단순하게 처리가 가능하다.

여기까지 기본적인 내용으로 보면 일반적인 안드로이드 앱에서는 SAX를 사용하는 것이 대세라고 볼수 있겠고, 사용하는 XML 문서의 특성에 따라 DOM 혹은 XmlPullParser를 사용하는 것도 괜찮다는 결론이 나온다. 하지만 국내 커뮤니티들에서는 사용하기 편리한 XmlPullParser를 많이 쓰는 것으로 보인다. 사실 SAX와 XmlPullParser 간의 성능차이는 그리 크지 않아보이기 때문에 본인한테 편한 것을 쓰는게 좋을 것 같다.

참고로 Shane Conder에 의해 쓰여진 기사를 보면 그림과 같이 안드로이드에서 SAX, XmlPullParser, DOM의 성능을 개략적으로 볼 수 있다.



마지막으로 앱에서 XML을 만들어 서버로 전송해야 할 경우엔 XmlPullParser와 같은 패키지에 들어있는 XmlSerializer를 사용하는 것이 편하다고 한다.

XmlPullParser 사용법

1. XmlPullParser가져오기



2. XmlPullParser로 값 가져오기

 - xpp.nextTag()  //XmlPullParser.START_TAG(2), XmlPullParser.END_TAG(3)
 - xpp.getName() //Tag안의 값(String)
 - xpp.nextText() // Tag사이의 값(String)





 

 

저작자 표시
신고

'Study > Android' 카테고리의 다른 글

[Android: SharedPreference]  (0) 2011.04.05
[Android: Web Parsing]  (0) 2011.04.04
[Android: CustomView]  (0) 2011.03.29
[Android: ListView]  (0) 2011.03.28
[Android: Activity만들기]  (0) 2011.03.23
[Android: Media Scanner]  (0) 2011.03.23
Trackback 0 | Comment 0
크리에이티브 커먼즈 라이선스
Creative Commons License

리스트 뷰는 복수 개의 항목을 수직으로 표시하는 위젯이다.

리스트 뷰, 그리드 뷰, 스피너, 갤러리 등이 모두 항목 집합을 표시하는데 이들을 묶어서 어댑터 뷰라고 부른다. 각 위젯은 집합을 표시한다는 면에서 기능적으로 동일하지만 항목을 표시하는 방법이 다르다. 공동 조상인 AdapterView는 ViewGroup으로부터 파생되므로 어댑터 뷰는 항목에 해당하는 여러 개의 차일드 뷰를 가질 수 있다. 뿐만 아니라 리니어, 렐러티브같이 배치만 담당하는 레이아웃과는 달리 사용자와 상호작용도 처리하므로 터치나 키패드로 항목을 선택할 수도 있다.



코드에서 문자열 배열을 직접 정의하는 것은 효율적이지 못하며 관리에도 불리하다. 고정적인 문자열이라면 컬렉션이나 배열을 쓰는 것보다 리소스에 정의해 놓고 읽어와 사용하는 것이 바람직하다. 배열도 일정의 리소스이다. 패키지 탐색기의 values 노드에 arrays.xml파일을 만들고 다음 문서를 작성한다.

 

저작자 표시
신고

'Study > Android' 카테고리의 다른 글

[Android: Web Parsing]  (0) 2011.04.04
[Android: CustomView]  (0) 2011.03.29
[Android: ListView]  (0) 2011.03.28
[Android: Activity만들기]  (0) 2011.03.23
[Android: Media Scanner]  (0) 2011.03.23
[Android: 다국어 지원]  (0) 2011.03.23
Trackback 0 | Comment 0
크리에이티브 커먼즈 라이선스
Creative Commons License
안드로이드는 4개의 컴포넌트로 구성된다. 그 중 액티비티를 만드는 방법을 보려고 한다.

다음과 같은 순서로 진행한다.
  1. Activity클래스를 상속한 클래스 생성.
  2. 레이아웃을 위한 android XML파일 생성.
  3. AndroidManifest에 Activity를 등록.

 

 


저작자 표시
신고

'Study > Android' 카테고리의 다른 글

[Android: CustomView]  (0) 2011.03.29
[Android: ListView]  (0) 2011.03.28
[Android: Activity만들기]  (0) 2011.03.23
[Android: Media Scanner]  (0) 2011.03.23
[Android: 다국어 지원]  (0) 2011.03.23
[Android: 위젯의 클릭 이벤트]  (0) 2011.03.21
Trackback 0 | Comment 0
크리에이티브 커먼즈 라이선스
Creative Commons License
에뮬레이터를 사용하여 안드로이드를 개발하게 될 경우, SD카드를 설정해주고, 그 SD카드에 이미지나 음악파일을 추가하여 사용할 경우가 있다. 

이때, 파일을 추가한 후, 추가한 정보가 바로 나타나지 않을 경우가 있는데, 이런 겨우에는 Media Scanner를 이용하여 가상 SD카드를 스캔해주어야 한다. 

아래는 Media scanner에 접근 하는 방법이다. 

 
저작자 표시
신고

'Study > Android' 카테고리의 다른 글

[Android: ListView]  (0) 2011.03.28
[Android: Activity만들기]  (0) 2011.03.23
[Android: Media Scanner]  (0) 2011.03.23
[Android: 다국어 지원]  (0) 2011.03.23
[Android: 위젯의 클릭 이벤트]  (0) 2011.03.21
[Android: 이벤트 핸들러]  (0) 2010.10.16
Trackback 0 | Comment 0
크리에이티브 커먼즈 라이선스
Creative Commons License
안드로이드는 쉽게 다국어를 지원할 수 있도록 설계되어있다.
다른 언어에 대해 일일이 체크할 필요 없이 xml파일을 수정하여 추가하는 방법을 사용하면 된다.
res폴더에 values-ko(한국어)폴더를 새로 만든다.



values폴더에 들어있는 strings.xml파일을 values-ko폴더에 복사한후 다음과 같이 수정한다.


이곳까지 진행이 되었다는 프로그램 구현시 작업은 모두 끝이 났고 이제 모바일 단말에서 설정만 수정하면 사용자에게 맞는 언어로 변환되어 나타날 것이다.

다음은 모바일 단말에서 언어를 선택하는 방법이다.


 

 

 

 

저작자 표시
신고

'Study > Android' 카테고리의 다른 글

[Android: Activity만들기]  (0) 2011.03.23
[Android: Media Scanner]  (0) 2011.03.23
[Android: 다국어 지원]  (0) 2011.03.23
[Android: 위젯의 클릭 이벤트]  (0) 2011.03.21
[Android: 이벤트 핸들러]  (0) 2010.10.16
[Android: 출력]  (0) 2010.10.15
Trackback 0 | Comment 0
크리에이티브 커먼즈 라이선스
Creative Commons License


비슷한 코드가 반복되므로 리팩토링을 한다. 안드로이드는 하나의 리스터를 여러 뷰에 대해 등록하는 것을 허용한다.



액티비티가 OnClickListener 인터페이스를 직접 구현하였으므로 이 경우 리스너는 액티비티 자신인 this이다. 한 리스너를 두 버튼의 클릭 메서드로 같이 등록했으므로 어떤 버튼을 누르나 호출되는 메서드는 동일하다. 대신 onClick 메서드는 누구를 클릭했는지 View타입의 인수 v를 전달받으며 vgetId 메서드를 호출하여 클릭된 버튼을 알아내고 각 버튼별 클릭처리를 수행한다.

 

핸들러가 하나로 통합되었다는 면에서 바람직하지만 액티비티를 리스너로 사용한다는 점은 다소 부담스럽다. 최상위의 액티비티는 그대로 두고 별도의 리스너 객체를 멤버로 선언한 후 이 멤버를 리스너로 사용하는 것이 좀 더 깔끔하다.

 


위의 코드는 위젯의 리스너를 처리하는 가장 정석적인 방법이다.

저작자 표시
신고

'Study > Android' 카테고리의 다른 글

[Android: Media Scanner]  (0) 2011.03.23
[Android: 다국어 지원]  (0) 2011.03.23
[Android: 위젯의 클릭 이벤트]  (0) 2011.03.21
[Android: 이벤트 핸들러]  (0) 2010.10.16
[Android: 출력]  (0) 2010.10.15
[Android: 레이아웃(Layout)?]  (0) 2010.10.03
Trackback 0 | Comment 0
크리에이티브 커먼즈 라이선스
Creative Commons License
뷰?
안드로이드 응용 프로그램의 화면을 구성하는 주요 단위 액티비티.
액티비티 자체는 화면에 직접 보이지 않으며 액티비티 안의 뷰가 사용자를 대면하는 실체이다.
뷰가 여러개 모여서 액티비티 하나를 구성하고 액티비티 여러 개가 모여서 응용 프로그램이 된다.

위젯?
버튼, 텍스트 뷰, 에디트, 라디오 버튼 등이 위젯이며 흔히 말하는 컨트롤

뷰 그룹?
직접적으로 보이지 않으며 다른 뷰를 담는 컨테이너 역할.
이름 그대로 유기적으로 여러 개의 뷰를 유기적으로 모아 놓은 것.

뷰 속성?

id: 뷰를 칭하는 이름
- 사용방법: android:id="@+id/name
xml문서에 id를 지정해 놓으면 이 이름이 R.java에 정수형 상수로 정의된다.
코드에서 이 뷰를 참조할 때는 findViewById라는 메서드를 호출하느데 인수로 참조할 뷰의 id를 전달한다.

layout_width, layout_height: 뷰의 폭과 높이를 지정한다.
- 속성값: fill_parent, wrap_content, 정수 크기

background: 뷰의 배경을 어떻게 채울 것인가를 지정하는 것
-속성값: #RGB, #ARGB, #RRGGBB, #AARRGGBB

padding: 뷰와 내용물 간의 간격을 지정(안쪽 여백)

margin: 뷰와 부모와의 간격을 지정(바깥 여백)

visibility: 뷰의 표시 유무를 지정
-속성값: visible, invisible, gone

clickable: 마우스 클릭 이벤트 지정

longClickable: 마우스 롱 클릭 이벤트 지정

focusable: 키보드 포커스를 받을 수 있는 지정


위젯_TextView
- 화면에 텍스트를 출력하는 위젯

text: 텍스트 뷰의 가장 중요한 속성으로 출력할 문자열을 지정

textColor: 문자열의 색상을 지정

textSize: 텍스트의 폰트 크기를 지정

textStyle: 폰트의 속성

typeFace: 글꼴의 모양을 지정

width, height: 텍스트 뷰의 폭과 높이이며 크기값과 단위를 같이 지정

singleLine: 텍스트가 위젯의 폭보다 더 길게 강제로 한 줄에 출력하도록 한다.


위젯_ImageView
- 이미지 뷰는 아이콘이나 비트맵을 출력하는 위젯

src: 출력할 이미지를 지정하는 가장 중요한 속성
android:src="@drawable/name"

maxHeight, maxWidth: 이미지가 출력될 최대 크기를 지정한다.

adjustViewBounds: 이미지의 종횡비를 맞추기 이미지뷰의 크기를 적당히 조정할 것인가를 지정.

cropToPadding: true일 경우 위젯의 주어진 여백에 맞추기 위해 이미지의 일부를 잘라낸다.

tint: 이미지에 색조를 입힌다.

scaleType: 이미지의 원래 크기와 다르게 출력할 때 적용할 확대, 축소 알고리즘을 지정. 


위젯_EditText
- 문자열을 입력 받는 위젯이며 간단히 줄여서 에디트.
- TextView의 서브 클래스.

위젯_Button
- 사용자가 클릭해 명령을 내릴 수 있는 위젯


레이아웃?
- ViewGroup으로 부터 파생되는 클래스들로서 다른 뷰들을 차일드로 포함하는 뷰의 컨테이너이다.
- 버튼, 에디트, 텍스트 같은 기본 위젯들이 일정한 규칙에 따라 모여서 하나의 레잉아웃을 구성하고 레이아웃 여러개가 모여 하나의 액티비티 화면을 완성한다.


리니어 레이아웃(LinearLayout)?
- 리니어의 가장 중요한 속성은 뷰의 배치 방향을 결정하는 orientation이다.
- 일렬로 배치하는 방법은 수평, 수직 두 가지가 있다.
- vertical은 차일드를 위에서 아래로 수직으로 배열하고 horizontal은 차일드를 왼쪽에서 오른쪽으로 수평 배열한다.
- 디폴트는 수평적용이다.


렐러티브 레이아웃(RelativeLayout)?
- 위젯과 부모와의 위치 관계 또는 위젯끼리의 관계를 지정함으로써 뷰를 배치하는 레이아웃이다.
- 쉽게 말해서 누구 밑의 누구, 누구 옆의 누구 식으로 서로간의 위치 관계를 지정하는 것이다.
- 위젯끼리의 관계를 "누구"를 지칭하기 위한 id가 필요하므로 기준이 되는 위젯에 id를 반드시 지정해야 한다.


앱솔루트 레이아웃(AbsoluteLayout)?
- 의미상으로 렐러티브 렐러티브의 반대 속성을 가지는 레이아웃이다.
- 이름 그대로 관계나 순서에 상관없이 지정한 절대 좌표에 차일드 뷰를 무식하게 배치한다.
- 차일드 뷰의 좌표를 layout_x, layout_y 속성으로 지정해 놓으면 부모의 좌상단을 기준으로 한 좌표에 뷰가 배치된다.
- 공식적으로 사용하지 않는 레이아웃


프레임 레이아웃(FrameLayout)?
- 차일드를 배치하는 규칙이 따로 없고 모든 차일드는 프레임의 좌상단이 된다.
- 차일드가 두개 이상일 때는 추가된 순서대로 겹쳐서 표시된다.
- 먼저 추가된 차일드가 아래쪽에 깔리고 나중에 추가된 차일드가 위쪽에 겹친다.

테이블 레이아웃(TableLayout)?
- 이름이 의미하는 바대로 표 형식으로 차일드를 배치하는 레이아웃이다.
- 표는 가로, 세로로 줄을 긋고 각 줄이 만나는 행과 열을 구성되는데 쉽게 말해서 바둑판 모양이라고 생각하면 된다.
- 테이블의 임의 개수의 TableRow 객체로 구성되며 TableRow 객체 하나가 곧 행이다.
- TableRow안에는 임의 개수의 열이 배치되는데 행 안의 열 하나가 셀이라고 부르며 셀에는 차일드 뷰 하나가 들어간다.
- TableRow 개수가 곧 가로 행의 개수이며, TableRow안에 배치되는 뷰의 개수가 곧 세로 열의 개수가 되고 테이블의 전체 크기는 행*열이된다.







저작자 표시
신고

'Study > Android' 카테고리의 다른 글

[Android: Media Scanner]  (0) 2011.03.23
[Android: 다국어 지원]  (0) 2011.03.23
[Android: 위젯의 클릭 이벤트]  (0) 2011.03.21
[Android: 이벤트 핸들러]  (0) 2010.10.16
[Android: 출력]  (0) 2010.10.15
[Android: 레이아웃(Layout)?]  (0) 2010.10.03
Trackback 0 | Comment 0

강군v's Blog is powered by Daum & tistory

 

티스토리 툴바