Upload
motorola-mobility-motodev
View
3.743
Download
7
Embed Size (px)
Citation preview
Anna SchallerAndroid 기술 전도사
개발자 플랫폼 및 서비스
Motorola Mobility
Fragment 소개
2페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
Fragment
• 애플리케이션을 하위 구성 요소로 나누어 개별적으로 관리하고 다양한 방법으로 결합할 수 있도록 해줍니다 ( 예 : 다중 창 UI 만들기 ).
3페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
왜 Fragment 인가 ?
• 개발자의 관점에서 볼 때 스마트폰과 태블릿 간 가장 큰 차이점은 화면 크기입니다 .
• Fragment 는 스마트폰과 태블릿 모두에 맞게 최적화하고 싶은 앱을 위한 가교를 만들어 줍니다
Fragment 가 두 개인 Activity A
또는
4페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
준비 (Getting there)
• 준비하기 위한 두 가지 방법– Android 3.0 SDK
– Android Compatibility( 호환 ) 패키지
• 다수의 레이아웃– 어디에서나 이중 + 창 지원
– 어디에서나 단일 창 지원
• Activity 가 여전히 필요함
• 두 개 정도의 Fragment 만들기
• 표시되는 각 Fragment 의 경우 UI 를 추가
• Fragment 를 Activity 에 추가
5페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
• 화면 크기
– 소 , 중 , 대 , 초대형
• 각 화면 크기에는 2 가지 방향이 있습니다
– 가로
– 세로
• 여러 구성에 대한 계획 수립
– /res/layout-small-land 및 /res/layout-small-port
– /res/layout-normal-land 및 /res/layout-normal-port
– /res/layout-large-land 및 /res/layout-large-port
– /res/layout-xlarge-land 및 /res/layout-xlarge-land
레이아웃에 대한 계획 수립
6페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
이중 창 ( 가로 및 세로 )
7페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
Fragment – 이중 창
Fragment 목록
Fragment
Activity
findFragmentById(R.id.DetailFragment)
setContentView(R.layout.main)
8페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
Android 3.0 에서 Fragment 작업하기1. 각 Fragment 를 위한 새 클래스를 만듭니다
– android.app.Fragment; 를 가져옵니다
– Fragment 또는 ListFragment 를 확장합니다 (Activity 대신 )
– 수명 (Lifecycle) 호출을 추가합니다
2. 각 Fragment 에 대한 새 resource.xml 파일을 생성합니다<ViewGroup> <UI elements> </ViewGroup>
3. 각 Fragment 를 위한 새 Fragment 태그로 main.xml 을 업데이트합니다
<fragment class=“my.new.fragment.class” android:id=“@+id/fragmentIdX>
4. MainApp.java 에서 (Activity 확장 )
– setContentView(R.layout.main) 로 애플리케이션 레이아웃을 로드합니다
5. Fragment1 목록 항목이 findFragmentById(R.id.fragmentIdX) 로 Fragment2 에 연결됩니다 .
9페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
프로젝트 해부 – 이중 창만 해당(Android 3.0)
myFragmentProject|-- AndroidManifest.xml|-- /src|------- /main.java // Activity 확장|------- /fragment1.java // Fragment, ListFragment, DialogFragment 등의 확장|------- /fragment2.java // Fragment, ListFragment, DialogFragment 등의 확장|--- /res|------- /layout-land // 가로 방향 레이아웃|----------- /main.xml // 가로 방향 애플리케이션 리소스 파일 (Fragment 태그 포함 )|----------- /fragment1.xml // Fragment 1 UI 레이아웃|----------- /fragment2.xml // Fragment 2 UI 레이아웃 가로 방향|------- /layout-port // 세로 방향 레이아웃|----------- /main.xml // 세로 방향 애플리케이션 리소스 파일 (Fragment 태그 포함 )|----------- /fragment2.xml // Fragment 2 UI 레이아웃 세로 방향|------- /values-xlarge| . . .
10페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
3.0 코드 : main.java
• 메인 Activity 는 onCreate() 동안 일반적인 방법으로 레이아웃을 적용합니다
• setContentView(R.layout.main) 는 <fragment> 태그가 있는 레이아웃이 포함된 리소스 파일을 로드합니다 . Fragment 는 Activity 가 레이아웃을 로드하는 즉시 인스턴스화됩니다 .
11페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
3.0 코드 : 메인 레이아웃
fragment1 ( 목록 )
fragment2 ( 디테일 )
가로옆으로 나란히
12페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
3.0 코드 : 메인 레이아웃
세로위에서 아래로
목록 폭 및 높이가 반전되어야 함
13페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
3.0 코드 : Fragment 목록
목록 어댑터 설정
목록 항목 콜백 생성
이미지 업데이트
Activity 생성 후 실행할 새 수명 호출
디테일 Fragment 찾기
14페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
3.0 코드 : Fragment 디테일
디테일 보기를 올리고 첫 번째 이미지 로드
목록 위치를 기반으로 이미지 교체
15페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
3.0 코드 :Fragment UI
(fragment1)목록 항목
(fragment2)프레임 항목(ImageView 포함 )
16페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
• UI 리소스 정의
– Activity 와 동일한 뷰 (View) 와 뷰 그룹을 사용합니다
UI 가 포함된 Fragment
listfragment.xml <TextView>
fragment.xml <FrameLayout>
<ImageView> <LinearLayout> <GridView> [. . .]
dialogfragment
17페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
UI 가 포함되지 않은 Fragment
18페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
findFragmentByTag()
public static class WorkerFragment extends Fragment {[. . .] // 백그라운드 쓰레드에서 해당 작업 수행
}
public static class myOtherFragment extends Fragment { @Override public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
FragmentManager fm = getFragmentManager();
// 워커 Fragment 가 유지되었는지 확인합니다 .mWorkFragment = (WorkerFragment)fm.findFragmentByTag("work");
// 유지되지 않았다면 ( 또는 최초로 실행 중인 경우 ) 생성해야 합니다 .if (mWorkFragment == null) { mWorkFragment = new WorkerFragment();
// 무엇과 작동 중인지 알려줍니다 . mWorkFragment.setTargetFragment(this, 0); fm.beginTransaction().add(mWorkFragment, "work").commit();
} }}
19페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
Android Compatibility( 호환 ) 패키지
• “ 모두를 위한 Fragment” 로 알려져 있음• Honeycomb 과 Android Compatibility( 호환 ) 패키지 비교• 차이점이 무엇입니까 ?
• Compatibility Library( 호환 라이브러리 ) 가 API 레벨 4 이상과 작동 가능
• 프로젝트에 새로운 라이브러리를 추가해야 함• 새로운 Activity 종류• 새로운 API
20페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
이중 창 (Android 2.2( 가로 방향 ))
21페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
단일 창 (Android 2.2( 세로 방향 ))
22페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
Fragment – 이중 창
Fragment 목록
Fragment
FragmentActivity1
findFragmentById(R.id.DetailFragment)
setContentView(R.layout.main)
23페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
Fragment – 단일 창
Fragment
FragmentActivity1
FragmentActivity2
Fragment 목록
intent.setClass(getActivity(),Fragment2.class);startActivity(intent);
setContentView(R.layout.main)
findViewById(R.id.DetailFragment) is NULL
24페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
Compatibility Library( 호환 라이브러리 ) 수정
• 리소스를 업데이트합니다– 세로 방향 레이아웃에는 fragment1 태그만 있습니다 (fragment2 태그 없음 )
• 코드를 업데이트합니다– android.v4.support 를 가져옵니다 .*
– 방향에 따라 boolean 을 설정합니다
– 가로 방향일 경우 (orientation == landscape) 이중 창입니다
• fragment1 및 fragment2 를 표시합니다
– 세로 방향일 경우 (orientation == portrait) 단일 창입니다
• intent 를 통해 새로운 FragmentActivity 에서 fragment2 를 엽니다
– getFragmentManager() 대신에 getSupportFragmentManager() 를 호출합니다
25페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
프로젝트 해부 – 이중 창 + 단일 창(Android Compatibility 패키지 )
myFragmentProject|-- AndroidManifest.xml|-- /src|------- /main.java // FragmentActivity 확장|------- /fragment1.java // Fragment, ListFragment, DialogFragment 등의 확장|------- /fragment2.java // Fragment, ListFragment, DialogFragment 등의 확장|------- /fragment2Main.java // FragmentActivity 확장 |--- /res|------- /layout-land // 가로 방향 레이아웃 ( 태블릿의 정상적인 방향 )|----------- /main.xml // 태블릿 또는 가로 방향 애플리케이션 리소스 파일 ( 이중 )|----------- /fragment1.xml // Fragment1 UI 레이아웃|----------- /fragment2.xml // Fragment2 UI 레이아웃|------- /layout-port // 세로 방향 레이아웃 ( 스마트폰의 정상적인 방향 )|----------- /main.xml // 스마트폰 또는 세로 방향 애플리케이션 리소스 파일 ( 단일 )|----------- /fragment1.xml|------- /values-xlarge| . . .
26페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
Android Compatibility( 호환 ) 패키지 이용
• 환경 설정
– Android SDK 및 AVD Manager 를 이용하여 “ Android Compatibility Package”( 호환 패키지 ) 를 다운로드합니다 . SDK 설치 디렉토리에 extras/android/compatibility/v4/android-support-v4.jar 가 있습니다 .
– 선택한 API 레벨 (4-10) 에서 새 Android Project( 프로젝트 ) 를 생성합니다 .
– android-support-v4.jar 를 프로젝트의 /libs 디렉토리에 추가합니다 .
– Studio 또는 Eclipse 사용자인 경우에는 프로젝트 구축 경로에도 추가합니다(Project -> Properties -> Java Build Path -> Libraries -> Add JAR).
27페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
Fragment 사용 : 정보
• 3.0 Developer Guide 에 있는 Fragment 에 대한 대한 기본 정보• 3.0 Reference for APIs 참조
– android.app.Fragment
– android.app.ListFragment
• ListActivity 와 유사한 목록을 표시합니다
– android.app.DialogFragment
• 부동 대화 상자를 표시합니다
– android.app.FragmentManager
• Fragment 와 상호 작용을 위한 인터페이스 (findFragmentById)
– android.app.FragmentTransaction
• Fragment 작동을 위한 API(add, remove, replace, hide, show)
28페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
Fragment 사용 : 견본
• Android 3.0 Fragment 를 위한 Honeycomb Gallery 앱
• Android Compatibility 패키지의 extra 폴더에서– /android-sdk/extras/android/compatibility/v4/samples/ApiDemos/src/com/example/
android/apis/app/
– HC 버전용 Fragment<>.java 를 찾습니다
– Android Compatibility 패키지 코드용 Fragment<>Support*.java
• Reto Meier 의 블로그 게시물– http://blog.radioactiveyak.com/2011/02/android-app-surgery-earthquake-redux.html
– http://blog.radioactiveyak.com/2011/02/strategies-for-honeycomb-and-backwards.html
• Diane Hackborne 의 블로그 게시물– http://android-developers.blogspot.com/2011/02/android-30-fragments-api.html
(Android 3.0 Fragment API)
29페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
자발적인 참여 : developer.motorola.com
• 디스커션 보드에 참여 하시 여러분의 질문에 대한 답변 및 조언을 받으십시오
– http://community.developer.motorola.com/
• 도구를 사용해 보십시오– MOTODEV Studio: 추가적 기능 ( 문자열 로컬화 , 데이터베이스 관리자 , 코드
정보 ) 이 있는 이클립스 기반의 IDE
– App Validator: Android 앱의 호환성과 일관성을 검사하기 위한 온라인 도구
• 트위터 (Twitter) 에서 트윗하십시오– appsum11kr
• 제품 사양 참조– http://developer.motorola.com/products/xoom/
감사합니다
© 2010 Motorola Mobility, Inc.
46
31페이지
© 2011 Motorola Mobility, Inc.
Fragment 소개
법적 고지 라이센스 주의 사항
따로 기재된 사항이 없다면 Motorola Mobility Inc. 가 기술하고 제공하는 견본 소스 코드는 아래 설명과 같이 사용이 허가됩니다 .
Copyright © 2010-2011, Motorola, Inc. All rights reserved( 달리 명시적으로 표시한 것은 예외 ).• 수정 유무를 막론하고 소스 및 2진수 형태로의 재배포 및 사용은 다음 조건이 충족될 경우에만 허용됩니다 .• 소스 코드의 재배포는 위의 저작권 주의 사항 , 이 조건 목록 및 다음의 부인 고지 사항을 유지해야 합니다 .• 2진수 형태로의 재배포는 위의 저작권 주의 사항 , 이 조건 목록 및 다음의 부인 고지 사항을 배포물과 함께 제공되는 문서 및 / 또는 기타 자료에 복제해야 합니
다 .
구체적인 사전 서면 허가가 없이는 이 소프트웨어에서 파생된 제품을 보증하고 홍보하는 데 Motorola, Inc. 이름 및 해당 기여자의 이름을 사용할 수 없습니다 .
이 소프트웨어는 저작권 소유자와 기여자에 의해 " 있는 그대로 " 제공되며 모든 명시적 또는 묵시적 보증 ( 상품성 및 특정 목적에 대한 적합성에 대한 묵시적 보증을 포함하며 여기에 제한되지 않음 ) 을 배제합니다 . 저작권 소유자 또는 기여자는 이 소프트웨어의 사용으로 인해 발생하는 모든 직접적 , 간접적 , 부수적 , 예외적 , 전형적 또는 결과적 손해 ( 대체품이나 대체 서비스의 조달 , 사용 , 데이터 또는 이익 손실 , 또는 영업 중단을 포함하되 이에 제한되지 않음 ) 에 대하여 계약에 의한 것이든 , 엄밀한 책임 또는 불법 행위 ( 또는 과실과 기타 행위를 포함하여 ) 에 의한 것이든 이와 여타 책임 소재에 상관없이 어떠한 경우에도 책임을 지지 않으며 , 이는 그와 같은 손해의 가능성을 사전에 알고 있던 경우에도 마찬가지입니다
이 프레젠테이션에서 표시되는 기타 소스 코드는 다른 라이센스 하에 제공될 수도 있습니다 .
Apache 2.0Copyright © 2010, Android Open Source Project. All rights reserved( 달리 명시적으로 표시한 것은 예외 ).
Apache 라이센스 하에서 사용이 허가됨 , 버전 2.0(" 라이센스 "); 이 라이센스를 준수하지 않고는 이 파일을 사용할 수 없습니다 . http://www.apache.org/licenses/LICENSE-2.0에서 라이센스 사본을 얻을 수 있습니다 .
해당 법률에 의해 필요하거나 서면 동의가 있지 않는 한 이 라이센스 하에서 배포되는 소프트웨어는 명시적이든 묵시적이든 막론하고 어떠한 보증이나 조건 없이 "있는 그대로 " 배포됩니다 . 이 라이센스 하의 특정 언어 관리 허가 및 제한 사항은 라이센스를 참조하십시오 .
Creative Commons 3.0 귀속 라이센스
이 프레젠테이션의 일부는 Google 이 생성하고 공유하는 작업에서 복제된 것이며 (http://code.google.com/policies.html) Creative Commons 3.0 귀속 라이센스(http://creativecommons.org/licenses/by/3.0/) 에 설명된 약관에 따라 사용되었습니다 .