안드로이드 개발 레이아웃 인플레이션(LayoutInflater)으로 화면 구성하는 방법 |
환경: Android Studio |
안드로이드에서 인플레이션이란 디자인한 XML 레이아웃 파일을 메모리에 올려서 화면에 보여 주는 과정을 말합니다. 인플레이션 방식은 두 가지입니다. 기본적으로 onCreate() 함수에 setContentView() 를 이용해서 화면 전체를 그리는 것과 이미 그려진 곳에 부분적으로 화면을 그리는 방식입니다. 부분적인 인플레이션은 동적으로 화면을 구성하고 싶을 때 많이 이용합니다.
◎ 기존 레이아웃에 LayoutInflater 로 생성한 레이아웃 추가하는 경우 |
첫 번째 인플레이션 방법은 기존 레이아웃에 동적으로 View 를 추가하는 것입니다. 먼저 LayoutInflater 객체를 생성하기 위해 getSystemService() 함수를 사용했습니다. 그리고 View 를 추가하기 위해 LayoutInflater 의 inflate() 함수를 호출합니다. inflate() 함수에서 필요한 값들은 다음과 같습니다.
View inflate (int resource, ViewGroup root, boolean attachToRoot)
l resource : 추가하고 싶은 레이아웃 파일 id.
l root : attachToRoot 가 True 일 경우 추가할 View의 부모 뷰
l attachToRoot : true 일 경우 root 에 넘긴 뷰의 자식으로 추가되고 false 일 경우 root 가 생성되는 View 의 LayoutParam 으로만 사용된다.
public class LayoutInflaterActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout_inflater); // 위젯을 추가할 메인 레이아웃 객체 가져오기 LinearLayout linearLayout = (LinearLayout) findViewById(R.id.root); // 레이아웃 인플레이터 객체 LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); // 메인에 새로 생성한 레이아웃 추가 layoutInflater.inflate(R.layout.btn_layout, linearLayout, true); } }
activity_layout_inflater.xml : 메인 Activity 를 구성하는 화면 레이아웃 입니다.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="display.samsung.workplace.LayoutInflaterActivity"> </LinearLayout>
btn_layout.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" android:orientation="vertical"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Inflate 추가 버튼" /> </LinearLayout>
◎ LayoutInflater 로 전체 레이아웃 새로 구성하는 방법 |
두 번째는 화면 전체를 그리기 위해 인플레이션을 사용하는 방법입니다. 기존에 사용했던 setContentView(R.layout.activity_layout_inflater) 을 주석 처리하고 새로 생성한 View 객체를 setContentView() 함수의 파라미터로 넘깁니다.
public class LayoutInflaterActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // root 레이아웃 생성 // setContentView(R.layout.activity_layout_inflater); 동일함 LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rootView = (View) layoutInflater.inflate(R.layout.activity_layout_inflater, null); setContentView(rootView); // 새로운 레이아웃 추가 LinearLayout linearLayout = (LinearLayout) rootView.findViewById(R.id.root); // 메인에 새로 생성한 레이아웃 추가 layoutInflater.inflate(R.layout.btn_layout, linearLayout, true); } }
'안드로이드 개발' 카테고리의 다른 글
안드로이드 개발 레이아웃 인플레이션(LayoutInflater)으로 추가한 화면 삭제하는 방법 (0) | 2018.01.28 |
---|---|
안드로이드(Android) SensorManager 와 SensorEventListener 이용해서 x, y, z 축 감지하는 방법 (0) | 2018.01.26 |
안드로이드(Android) 다양한 애니메이션 이동(translate) 을 구현하는 여러가지 방법 (0) | 2018.01.19 |
안드로이드 개발 서비스 바인딩 (Service Bind) 예제 구현하는 방법 (0) | 2018.01.18 |
안드로이드 개발 setId() 에러 Expected resource of type id 해결하는 방법 (0) | 2018.01.02 |
안드로이드 개발 Activity 호출하고 결과값을 받는 onActivityForResult 사용하는 방법 (0) | 2017.12.30 |
안드로이드 개발 서비스(Service) 컴포넌트 예제 구현하는 방법 (0) | 2017.12.27 |
안드로이드 개발 생성자 추가하는 방법, There is no default constructor available in (0) | 2017.12.23 |