본문 바로가기

카테고리 없음

<Android> - 안드로이드 inflate메서드를 이용해서 화면에 부분화면 띄우기

하나의 화면에서 인플레이션을 통해 뷰들을 메모리에 로딩시켜 객체화 한 후 띄워주기!!

 

전체적인 Activity와 xml 레이아웃  파일들의 구성

기본적인 MainActivity와 acvity_main.xml 와 별개로 새로운 Activity MenuActivity를 새로 만들면 자동으로 activity_menu.xml도 같이 생긴다.

 

activity_menu.xml의 구성을 다음과 같이 띄우고 부분화면으로 띄워줄 LinearLayout을 하단에 추가해서 id값을 container로 바꾸어준다.

 

다음은 부분화면의로 띄워줄 sub1.xml 을 새로 만들어 주었다.

 

sub1.xml Code

 

<?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">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="부분 화면 1"
        android:textSize="30sp"/>

    <CheckBox
        android:id="@+id/checkbox"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="동의합니다"/>

</LinearLayout>

 

이제 inflate메서드를 활용해서 부분화면을 메모리에 로딩 시켜 객체화 하는 과정을 거쳐야 한다.

 

다시 MenuActivity.java로 돌아와 소스코드를 수정해주겠다.

 

MenuActivity.java Code

 

package com.example.samplelayoutiflater;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;

public class MenuActivity extends AppCompatActivity {

    LinearLayout container;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);

        container = findViewById(R.id.container);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                inflater.inflate(R.layout.sub1, container, true);
                CheckBox checkBox = container.findViewById(R.id.checkbox);
                checkBox.setText("로딩되었어요!");

            }
        });
    }
}

 

inflater.inflate(R.layout.sub1, container, true);

inflate메서드는 첫 번째 파라미터로 XML레이아웃 리소스를, 두 번째 파라미터로 부모 컨테이너를 지정합니다.

이렇게 객체화 하는 인플레이션 과정을 통해서 container레이아웃에 부분 화면으로 띄워주기 위해 만든

sub1.xml을 띄워주는 것입니다!