Search Results
Search Results for '안드로이드' : 18 POSTS
- 2010.09.10 이클립스 Unable to upload file: timeout 이 뜨며 컴파일이 안될때 1
- 2010.08.27 XML을 이용하여 Shape Drawable 를 만드는중 radius가 적용이 안될때 1
- 2010.08.22 RelativeLayout 사용하기
- 2010.08.19 태스크란? (Task, Activity Stack)
- 2010.08.15 인텐트란? (Intent)
이클립스 Unable to upload file: timeout 이 뜨며 컴파일이 안될때
- Posted at 2010. 9. 10. 15:59
- Posted by 루지메이앙
- Filed under 안드로이드/오답노트
');
}
//-->
|
');
}
//-->
|
Failed to upload ********.apk on device 'M???????????'
[2010-09-10 13:44:46 - ********] java.io.IOException: Unable to upload file: timeout
와 같이 뜨며 컴파일이 안될때는 아래와 같이 이클립스 설정을 변경한다.
Window > Preferences > Android > DDMS > ADB connection time out (ms) 의 값을 늘려주면 된다.
XML을 이용하여 Shape Drawable 를 만드는중 radius가 적용이 안될때
- Posted at 2010. 8. 27. 17:18
- Posted by 루지메이앙
- Filed under 안드로이드/오답노트
');
}
//-->
|
');
}
//-->
|
<item> <shape> <!--corners android:radius="5dp"/--> <corners android:topRightRadius="5dp" android:topLeftRadius="5dp" android:bottomRightRadius="1px" android:bottomLeftRadius="1px" /> </shape> </item>
- 위와 같은 방법으로 모서리가 둥근 도형을 만들 수 있다
- radius 만 설정하면 모서리가 모두 값에 맞게 변하며 각각 따로 설정할때에는 위와 같은 설정을 해줘야 한다
- 이때 네가지 속성중 하나라도 빠지면 둥근 모서리가 적용이 되지 않으며 0dp 일 지라도 적용되지 않는다
- 어쩔 수 없이 모서리를 적용 시키지 않을 부분은 1px 의 값을 주어 눈에 잘 안보이도록 처리하였다
RelativeLayout 사용하기
- Posted at 2010. 8. 22. 02:44
- Posted by 루지메이앙
- Filed under 안드로이드/펌글
');
}
//-->
|
');
}
//-->
|
2. RelativeLayout
RelativeLayout은 위젯의 위치를 상대 위젯/ 컨테이너를 기준으로 결정하는 방법이다.
첫 번째로, 부모 컨테이너 내부에서 위젯 자신의 위치를 결정하는 속성은 다음과 같다.
위의 속성들은 모두 true, false 값을 입력 받는다.
두 번째로, 상대 위젯/컨테이너를 기준으로 배치 시 사용하는 속성은 다음과 같다.
마지막 android:layout_alignBaseline는 label과 EditText등의 Text기반 위젯의 글자 높이를 맞추는데 유용하게 쓰임.
위의 모든 attribute들은 기준이 되는 상대 위젯/컨테이너의 id를 값으로 지정하여야 한다.
기준이 되는 상대 위젯의 id는 "@id/위젯id"로 결정한다.
예를들어, 위젯 A 가 android:id="@+id/A"로 identiy되어있다면XML 내부에서 위젯 A는 "@id/A"로 불린다.
그럼으로 위젯 B를 위젯 A 오른쪽에 위치 하게 하고 싶다면 위젯 B의 alignment 속성을 다음과 같이 지정한다.
<위젯 A
......
android:id="@+id/A" />
<위젯 B
......
android:layout_alignRightOf="@id/A" />
이 경우 위젯 A, B는 다음과 같은 형태로 배치 된다.
RelativeLayout에서 주의할 두 가지 점은:
- XML Layout 파일은 위에서 아래로 순차적으로 한번 파싱됨으로 XML 문서상 밑에 위치한 위젯의 id를 위에 위치한 위젯이 참고하는 것은 불가능 하다. (아직 선언되지 않은 변수를 참조 할 수 없는 것과 같다.)
- 모든 fill 관련 속성은 자신 이외의 위젯이 사용하고 남은 스페이스에만 적용됨.
RelativeLayout 예제 (main.xml)
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5px" > <!-- XML layout은 위에서 부터 밑으로 parsing 됨으로 --> <!-- 다음의 TextView내부에서 아직 선언되지 않은 --> <!-- EditText나 Button들의 id(@id/edittext, @id/ok, @id/cancel)를 사용할 수 없음 --> <TextView android:id="@+id/label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="URL" android:paddingTop="15px" android:paddingRight="10px" /> <!-- 다음의 EditText(edittext)의 layout_width="fill_parent"는 --> <!-- 위 TextView(lable)가 사용하고 남은 공간을 채움 --> <EditText android:id="@+id/edittext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_toRightOf="@id/label" android:layout_alignBaseline="@id/label" android:text="http://tigerwoods.tistory.com" /> <Button android:id="@+id/ok" android:layout_width="80px" android:layout_height="wrap_content" android:layout_alignRight="@id/edittext" android:layout_below="@id/edittext" android:text="OK" /> <Button android:id="@+id/cancel" android:layout_width="80px" android:layout_height="wrap_content" android:layout_toLeftOf="@id/ok" android:layout_below="@id/edittext" android:text="Cancel" /> </RelativeLayout>
실행결과는 다음과 같다.
RelativeLayout의 완전한 API Reference는 다음의 링크를 참조.
RelativeLayout API Reference 링크
출처 : http://tigerwoods.tistory.com/11
태스크란? (Task, Activity Stack)
- Posted at 2010. 8. 19. 02:52
- Posted by 루지메이앙
- Filed under 안드로이드/이론정리
');
}
//-->
|
');
}
//-->
|
- Task는 어플리케이션에서 실행되는 액티비티를 보관하고 관리하며 Stack형태의 연속된 Activity로 이루어진다
- 선입후출(First In Last Out)형태로 나중에 적재된 액티비티일 수록 가장 먼저 사용된다
만약 1페이지>2페이지>3페이지 순으로 액티비티를 이동했을때 실행순서대로 Task에 push해 놓았다가
back버튼을 누르면 3페이지>2페이지>1페이지순으로 Task에서 pop시켜 되돌아 간다고 생각하면 된다
- 서로 다른 어플리케이션간의 이동에도 Task를 이용해 사용자 경험(UX)를 유지시켜 준다
- 최초적재 액티비티는 Root Activity 라고 하며 어플리케이션 런처로부터 시작된다
- 마지막으로 적재되는 액티비티는 Top Activity 라고 하며 현재 화면에 활성화 되어있는 액티비티를 말한다
- Task내에는 서로 다른 어플리케이션의 액티비티들이 포함될 수 있어 어플리케이션에 경계없이
하나의 어플리케이션인것 처럼 보이게 해준다
- Task의 Stack내에 존재하는 액티비티들은 모두 묶여서 background와 foreground로 함께 이동한다
홈버튼 클릭(task interrupt => background 이동), 홈버튼 롱클릭(recent task => foreground 이동)
- Flag를 사용하여 Task내 액티비티의 흐름을 제어할 수 있다
- 어플리케이션 내의 액티비티들은 하나의 어피니티를(affinity:친화력) 가지고 있다
- AndroidManifest 에서 <activity> 요소의 taskAffinity 속성을 사용해 개별 affinity가 지정 가능하다
- FLAG_ACTIVITY_NEW_TASK 플래그를 가진 인텐트 객체로 부터 호출된 allowTaskReparenting 속성을
True로 가지고 있는 액티비티에 한해 affinity가 동작한다
- 위 조건이 만족한 상황에서 시작된 액티비티는 자신과 동일한 어피니티를 갖는 태스크가 있을경우
해당 태스크로 이동한다
- 즉, [b]어피니티를 가진 A액티비티가 호출되어 해당 태스크에 속해있을때 [b]어피니티를 가진 태스크가
호출되면 A액티비티는 [b]어피니티를 가진 태스크로 이동한다
- 어피니티에 의해 태스크가 이동된 후에 back버튼으로 반환시 원래 해당하던 태스크로 돌아간다
- 하나의 어플리케이션내에서 하나 이상의 기능을 갖는 어플리케이션이 존재할경우 각 액티비티별로 다른
어피니티를 지정해 관리할 수 있다
- AndroidManifest 에서 플래그를 사용할때에는 <activity> 요소의 launchMode 속성을 사용하며
launchMode에서 사용가능한 속성은 다음과 같이 4가지만 가능하다
standard:
스택중 어느곳에나 위치 가능하며 여러개의 인스턴스가 생성가능하다
singleTop:
스택중 어느곳에나 위치 가능하며 여러개의 인스턴스가 생성가능하고 호출한 activity와 현재
최상위 activity가(top activity) 동일한 경우 최상위 activity가 재사용 된다(기존 최상위 activity는 pop)
singleTask:
루트 액티비티로만 존재하며 하나의 인스턴스만 생성가능하다(타 task에서 동일 activity 사용불가)
다른 액티비티 실행시 동일 Task내에서 실행이 가능하다
singleInstance: 루트 액티비티로만 존재하며 하나의 인스턴스만 생성가능하고 태스크내에 해당
액티비티 하나만 속할 수 있어 다른 액티비티를 실행시키면 새로운 Task가 생성되어
(FLAG_ACTIVITY_NEW_TASK와 동일) 그 Task내에 포함된다
- 소스코드에서 플래그를 사용하고 싶을때에는 Intent에 addFlags() 또는 setFlags() 메소드를 사용한다
FLAG_ACTIVITY_NEW_TASK:
동일 affinity의 task가 있으면 그곳에 실행되고 아니면 새로운 task를 실행
FLAG_ACTIVITY_SINGLE_TOP:
상단 singleTop과 같으며, 실행시 재사용 액티비티의 실행은 onPause(), onNewIntent(), onResume()
순으로 호출된다
☞ [B]를 single top설정: [A][B] 상태에서 [B] 호출시 => [A][재사용된B]
☞ [B]를 single top설정: [B][A] 상태에서 [B] 호출시 => [B][A][B]
FLAG_ACTIVITY_NO_HISTORY:
해당 액티비티는 재활성화시(back키를 눌러 다시 활성화될때) pop 된다
☞ [B]를 no history설정: [A][B][A] 상태에서 back키 사용시 [A]가 pop 되고 [B] 역시
no history에 의해 pop => [A]
FLAG_ACTIVITY_REORDER_TO_FRONT:
activity 호출시 이미 같은 activity가 task내에 있으면 같은 activity는 pop 시키고 해당 activity가 push 된다
☞ [A]를 reorder to front설정: [A][B] 상태에서 [A] 호출시 같은 activity인 [A]가 pop되고 => [B][A]
FLAG_ACTIVITY_CLEAR_TOP:
해당 task에 있는 모든 activity를 pop 시키고 해당 activity가 root activity로 task에 push된다
☞ [A]를 clear top설정: [A][B] 상태에서 [A] 호출시 모두 pop되고 => [A]
단, 해당 플래그는 액티비티를 모두 onDestroy() 시킨 후 새롭게 onCreate() 시키기 때문에 [A]를
유지하려면 FLAG_ACTIVITY_SINGLE_TOP 플래그와 함께 사용하면 된다
http://developer.android.com/reference/android/content/Intent.html
#FLAG_ACTIVITY_BROUGHT_TO_FRONT
- Task를 오랫동안 사용하지 않고 방치해 두면 시스템은 Root Activity를 제외한 모든 액티비티를 Clear 시킨다
- 이러한 동작은 Activity의 속성을 수정하여 제어할 수 있다
alwaysRetainTaskState:
Task의 Root Activity에 true로 설정되어 있다면 상단에 언급되었던 동작은 발생하지 않으며 Task는
오랜 시간 이후에도 Stack에 있는 모든 Activity를 유지한다
clearTaskOnLaunch:
이 속성이 true로 설정되어 있으면 alwaysRetainTaskState 와 정반대로 사용자가 Task를 떠났다가
다시 돌아올 때마다 항상 Stack은 Root Activity로 정리된다
finishOnTaskLaunch:
이 속성은 clearTaskOnLaunch와 유사하지만 전체 Task가 아닌 단일 Activity에서 동작한다
그리고 그것은 Root Activity를 포함한 어떤 Activity가 사라지는 원인이 될 수도 있다
true로 설정되어 있을 때, Activity는 현재 Session 동안 Task의 일부만 유지한다
만일 사용자가 해당 Task를 벗어났다가 다시 돌아오면 더이상 존재하지 않는다
인텐트란? (Intent)
- Posted at 2010. 8. 15. 04:06
- Posted by 루지메이앙
- Filed under 안드로이드/이론정리
');
}
//-->
|
');
}
//-->
|
- 안드로이드 시스템에서 커뮤니케이션을 담당하는 역할로 컴포넌트간의 호출과 메시지 전달에 이용한다
- 런처에 나타나지 않는(루트 액티비티가 아닌) 액티비티를 실행시킬 때 사용한다
- Activity, Service, Broadcast Receiver 컴포넌트를 활성화 시킬 수 있다
- startActivity(), startActivityForResult()에 포함되어 Activity를 호출하며, 호출된 액티비티는 getIntent()를
이용해 메시지를 전달받고, 이후 전달받은 메시지는 onNewIntent()를 override하여 전달받을 수 있다
- startActivityForResult()를 이용해 호출된 액티비티는 인텐트에 반환값을 넣어 다시 자신을 호출한
액티비티에게 되돌려 줄 수 있으며 이때에는 setResult()에 인텐트를 포함시켜 반환한다
- startService(), bindService()에 포함되어 Service를 호출하며, 호출된 서비스는 onStart(), onBind()를
override하여 메시지를 전달받을 수 있다
- sendBroadcast(), sendOrderedBroadcast(), sendStickyBroadcase()등에 포함되어 Broadcast를 호출하며
호출된 브로드캐스트는 onReceive()를 override하여 메시지를 전달받을 수 있다
- 이외에도 PendingIntent 라는 권한을 위임하는 인텐트가 있다
- 메시지를 전달할때 putExtra()를 사용하며 전달받을때에는 getExtras().get변수타입() 또는
get변수타입Extra()을 사용한다
ACTION_SEND를 이용한 암시적 인텐트 적용시 나오는 Chooser
- 인텐트를 사용할때에는 명시적으로 하나의 컴포넌트를 선택하여 메시지를 전달하는 방법과
암시적으로 여러 컴포넌트중 지정한 특성을 가진 컴포넌트중 하나를 선택하여 사용하는 방법이 있다
- 암시적 인텐트는 명시적으로 알지 못하는 컴포넌트 중 자신이 활용 가능한 컴포넌트를 다른
어플리케이션으로부터 불러서 사용할 수 있게 해주어 여러 어플리케이션의 컴포넌트를 활용가능하게 한다
이로인해 어플리케이션의 경계없이 서로다른 어플리케이션을 하나처럼 사용 가능하게 해준다
- 명시적 인텐트는 실행할 컴포넌트의 클래스명을 지정하여 활성화 시킨다
- 암시적 인텐트는 Action, Category, Data를 사용해 인텐트 필터에(intent filter) 걸러내고 남는
컴포넌트를 찾아(인텐트해석:intent resolving) 이중 한가지를 createChooser()로 선택하여 실행시킨다
- 인텐트 필터는 하나뿐이 아닌 여러개를 지정하여 일치하는 필터가 있을경우 통과할 수 있다
- Action은 AndroidManifest에 정의해놓은 각각의 컴포넌트가 처리할 행동을(Action) 참조하여 사용자가
지정한 Action과 일치하는 컴포넌트를 찾아내며 지정된 Action이 없을경우 일치한 것으로 간주한다
- Category는 AndroidManifest에 정의해놓은 각각의 컴포넌트 분류를(Category) 참조하여 사용자가
지정한 Category와 일치하는 컴포넌트는 찾아내며 지정된 Category가 없을경우 Category가 지정되지
않은 컴포넌트만 일치한 것으로 간주한다
- Data는 AndroidManifest에 정의해놓은 각각의 컴포넌트 URI를 참조하여 사용자가 지정한 type 또는
schema등 과 일치하는 컴포넌트는 찾아낸다
- 인텐트를 이용한 브라우저에 웹페이지 띄우기 예제
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
Intent-Filter 값
Intent 클래스의 정의 | AndroidManifest 일치값 | 설명 |
ACTION_MAIN | android.intent.action.MAIN | 시작(루트) 액티비티 |
ACTION_VIEW | android.intent.action.VIEW | 해당 자원을 보여주는 액션 |
ACTION_CALL | android.intent.action.CALL | 전화를 거는 액션 |
ACTION_DIAL | android.intent.action.DIAL | 전화 다이얼이 나오는 액션 |
ACTION_SEND | android.intent.action.SEND | 문자,메일등 데이터를 보내는 액션 |
ACTION_SCREEN_ON | android.intent.action.SCREEN_ON | 화면이 켜지는 액션 |
ACTION_BATTERY_LOW | android.intent.action.BATTERY_LOW | 배터리 부족 액션 |
Intent 클래스의 정의 | AndroidManifest 일치값 | 설명 |
CATEGORY_DEFAULT | android.intent.category.DEFAULT | 기본 카테고리 |
CATEGORY_LAUNCHER | android.intent.category.LAUNCHER | 어플리케이션 런쳐로 실행되는 분류 |
CATEGORY_HOME | android.intent.category.HOME | 홈스크린에 표시되는 액티비티 |
CATEGORY_BROWSABLE | android.intent.category.BROWSABLE | 인터넷 브라우저 사용분류 |
http://developer.android.com/guide/topics/intents/intents-filters.html#iobjs