안드로이드 개발 RelativeLayout 화면을 Java 소스에서 구현하는 방법

 

환경: Android Studio

 

기본적으로 디자인과 코드를 분리하는 것이 좋기 때문에 안드로이드 화면을 구성하는 소스는 XML 로 작성합니다. 하지만 모든 화면 레이아웃은 Java 코드로 구현이 가능합니다. 경우에 따라서 동적으로 화면을 구성해야 되기 때문입니다. 이런 예외적인 경우가 아니라면 디자인과 로직을 구현한 소스는 분리하는 것이 좋습니다.

 

먼저 XML 로 어떤 형태인지 세팅해 보았습니다. 화면에서 부모뷰를 기준으로 3가지 형태의 버튼을 배열합니다.

안드로이드 개발 RelativeLayout 화면을 Java 소스에서 구현하는 방법

  

위의 화면을 구성한 XML 소스는 다음과 같습니다

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="display.samsung.workplace.RelativeLayoutctivity">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:text="왼쪽상단" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="화면중앙" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:text="오른쪽하단" />
</RelativeLayout>

이제 XML 소스를 사용하지 않고 Java 코드에서 구현해 보겠습니다. 기존에 onCreate 함수에서 XML 을 이용한 화면 생성 함수인 setContentView 는 주석처리 합니다. 그리고 부모뷰인 RelativeLayout 객체를 생성합니다. 

public class RelativeLayoutctivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Java 코드로 구현하기 위해 화면 구성 함수는 주석처리 합니다.
        //setContentView(R.layout.activity_relative_layoutctivity);

        // RelativeLayout 객체를 생성합니다.
        RelativeLayout rl = new RelativeLayout(this);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
        );
        rl.setLayoutParams(params);

    }
}

다음은 버튼을 하나씩 만들어서 추가해 보겠습니다. 버튼 위젯을 만드는 과정은 RelativeLayout 때와 동일합니다. 추가된 내용은 RelativeLayout 에서 버튼을 부모뷰에 배치하는 옵션입니다. LayoutParams addRule() 함수를 이용해서 첫 번째 버튼의 위치를 지정했습니다

// 첫 번재 오른쪽 상단 버튼 구현
Button topButton = new Button(this);
topButton.setId(View.generateViewId());
topButton.setText("왼쪽상단");

RelativeLayout.LayoutParams topButtonParams = new RelativeLayout.LayoutParams(
        ViewGroup.LayoutParams.WRAP_CONTENT,
        ViewGroup.LayoutParams.WRAP_CONTENT
);
topButton.setLayoutParams(topButtonParams);

topButtonParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, 1);
topButtonParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, 1);

rl.addView(topButton);
setContentView(rl);

안드로이드 개발 RelativeLayout 화면을 Java 소스에서 구현하는 방법

 

나머지 두 개의 버튼을 추가한 전체 소스 입니다. addRule() 함수를 이용해서 버튼을 배치했습니다. 중앙에 배치하는 룰은 RelativeLayout.CENTER_IN_PARENT 입니다. 마지막에 RelativeLayout 에 만든 버튼을 추가하는 함수는 addView() 입니다. 그리고 setContentView() 함수에 XML Resource ID 가 아닌 RelativeLayout 객체를 입력합니다.

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;

public class RelativeLayoutctivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Java 코드로 구현하기 위해 화면 구성 함수는 주석처리 합니다.
        //setContentView(R.layout.activity_relative_layoutctivity);

        // RelativeLayout 객체를 생성합니다.
        RelativeLayout rl = new RelativeLayout(this);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
        );
        rl.setLayoutParams(params);

        // 첫 번재 오른쪽 상단 버튼 구현
        Button topButton = new Button(this);
        topButton.setId(View.generateViewId());
        topButton.setText("왼쪽상단");

        RelativeLayout.LayoutParams topButtonParams = new RelativeLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT
        );
        topButton.setLayoutParams(topButtonParams);

        topButtonParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, 1);
        topButtonParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, 1);

        // 두 번째 화면 중앙 버튼 구현
        Button middleButton = new Button(this);
        middleButton.setId(View.generateViewId());
        middleButton.setText("화면중앙");

        RelativeLayout.LayoutParams middleButtonParams = new RelativeLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT
        );
        middleButton.setLayoutParams(middleButtonParams);

        middleButtonParams.addRule(RelativeLayout.CENTER_IN_PARENT, 1);

        // 세 번째 화면 오른쪽 하단 버튼 구현
        Button bottomButton = new Button(this);
        bottomButton.setId(View.generateViewId());
        bottomButton.setText("오른쪽하단");

        RelativeLayout.LayoutParams bottomButtonParams = new RelativeLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT
        );
        bottomButton.setLayoutParams(bottomButtonParams);

        bottomButtonParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        bottomButtonParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

        // RelativeLayout 에 모두 추가한다.
        rl.addView(topButton);
        rl.addView(middleButton);
        rl.addView(bottomButton);
        setContentView(rl);
    }
}

안드로이드 개발 RelativeLayout 화면을 Java 소스에서 구현하는 방법

Posted by 녹두장군