안드로이드 개발 Fragment 화면 구성하는 방법 - FragmentActivity 로 화면 구성 |
환경: Android Studio |
프래그먼트의 장점은 하나의 Activity 에서 여러 개의 프래그먼트로 화면을 구성한 뒤 동적으로 부분 교체가 가능하며, 여러 Activity 에서 재사용이 가능하다는 것입니다. 다시 말해서 역동적이고 유연한 UI 디자인이 가능합니다. 이런 Fragement 로 화면을 구성하는 방법은 여러 가지 입니다. 오늘은 Activity 대신 FragmentActivity 를 상속받아 화면을 구성하겠습니다.
▼ 결과 화면은 다음과 같습니다. 상단과 하단을 나누어서 두 개의 Fragment 로 메인 화면을 구성합니다. 화면에서 동적으로 추가하는 것이 아니라 Activity 레이아웃 XML 에 <fragment> 태그를 이용해서 인스턴스를 생성할 것입니다.
▼ 메인 Activity 는 간단합니다. onCreate() 에서 화면을 구성할 news_articles.xml 을 로딩합니다.
import android.os.Bundle; import android.support.v4.app.FragmentActivity; public class MyFragmentActivity extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.news_articles); } }
▼ Activity 를 구성하는 메인 레이아웃 XML 입니다. <fragment> 태그를 이용해서 두 화면을 구성하였습니다. name 속성에 Fragment 를 상속받아 만든 클래스와 패키지 주소를 입력하면 별도의 작업 없이 바로 화면을 구성할 수 있습니다.
new_articles.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:name="gon.com.kakaomanager.HeadFragment" android:id="@+id/head_fragment" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="0dp" /> <fragment android:name="gon.com.kakaomanager.MainFragment" android:id="@+id/main_fragment" android:layout_weight="2" android:layout_width="match_parent" android:layout_height="0dp" /> </LinearLayout>
▼ 메인 Activity 를 구성하는 첫 번째 상단 fragment 입니다. Fragment 클래스를 상속받아 만들었습니다. onCreateView() 에서 LayoutInflater 객체를 통해 화면을 구성합니다
import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class HeadFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.head_view, container, false); } }
▼ 첫 번째 Fragment 화면을 구성하는 XML 레이아웃 입니다.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="Head Fragment" android:textSize="25dp" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/holo_green_dark"/> </LinearLayout>
▼ 두 번째 상단 fragment 는 다음과 같습니다. 첫 번째와 다를 것이 없습니다. onCreateView() 에서 화면을 구성합니다.
import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class MainFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.main_view, container, false); } }
▼ 두 번째 Fragment 를 구성하는 화면 레이아웃 입니다
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/textView1" android:text="Main Fragment" android:textSize="24dp" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>
◎ 다른 프래그먼트로 교체하는 방법 |
▼ Fragment 는 사용자가 동적으로 추가, 제거, 교체할 수 있습니다. FragmentTransaction 의 인스턴스를 FragmentManager 로 가져와서 beginTransaction() 함수를 실행합니다. 반영은 commit() 입니다.
public void onFragmentChange(View v){ Fragment newFragment; if (result) { newFragment = new MainFragment(); result = false; }else{ newFragment = new OneFragement(); result = true; } FragmentManager fm = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fm.beginTransaction(); fragmentTransaction.replace(R.id.main_fragment, newFragment); fragmentTransaction.commit(); }
'안드로이드 개발' 카테고리의 다른 글
안드로이드 개발 Wear(웨어러블) 앱 프로젝트 만드는 방법 (0) | 2018.11.07 |
---|---|
안드로이드 개발 Socket IO 사용해서 Node JS 서버와 통신하는 방법 (0) | 2018.11.06 |
안드로이드 개발 ERROR x86 emulation currently requires hardware acceleration 에러 (0) | 2018.10.17 |
안드로이드 개발 위젯 클릭(이벤트 연결) 으로 앱 실행하는 방법 (0) | 2018.09.21 |
안드로이드 개발 Fragment 와 Activity 의 통신하는 방법 (1) | 2018.08.31 |
안드로이드 개발 ArrayList 배열 개체를 JSON 으로 변경하는 방법 (1) | 2018.08.28 |
안드로이드 개발 간단하게 위젯 만드는 방법 (0) | 2018.08.15 |
안드로이드 개발 엑셀 파일 생성 및 데이터 불러오는 방법 (3) | 2018.08.07 |