본문 바로가기
개발(Development)/Android(안드로이드)

[안드로이드] XML | 코드로 화면을 그리는 메서드: setContentView()

by 카레유 2021. 7. 11.

# setContentView()메서드란?

액티비티의 화면을 그려주는는 메서드이다.

"Activity.java" 클래스에 정의된 메서드를 상속받아 사용한다.


# setContentView() 종류 3가지

setContetView() 메서드는 3가지 타입의 매개변수를 받을 수 있다.(오버로딩)

각 메서드는 Java | Kotlin 순으로 표기했다.

 

1.   setContentView(int layoutResID)  |  setContentView(layoutResID: Int

: 레이아웃 파일의 ID를 인수로 받아, XML 기반의 화면을 렌더링한다.

 

2.  setContentView(View view)  |  setContentView(view: View!) 

: View클래스의 객체를 인수로 받아, 코드 기반의 화면을 렌더링 한다.

* 단, View를 배치만 할 뿐, 레이아웃 상에 '어떻게' 배치할지는 정할 수 없다.

 

3.  setContentView(View view , ViewGroup.LayoutParams params)  

   |  setContentView(view: View!, params: ViewGroup.LayoutParams!) 

: View를 레이아웃 상에 어떻게 배치할지를 LayoutParmas(레이아웃 파라미터) 객체를 통해 설정한다.

: LayoutParmas을 통해 앞에 layout_이 붙는 속성(layout_width, layout_height 등)을 설정할 수 있다.

* 이 메서드의 활용은 LayoutParams를 다룬 글을 참고!

 

따라서 안드로이드는 XML 레이아웃 파일 뿐만 아니라, Java/Kotlin 코드만으로도 화면을 구성할 수 있다.


1. XML로 화면 표시

1) res/layout/activity_main.xml 리소스 파일로 화면을 구성해주고,

2) Activity 클래스의 setContentView(R.layout.activity)메서드로 레이아웃 리소스를 불러와 화면을 그리는 방식이다.

* setContentView()호출시, 내부적으로는 LayoutInflater.inflate()가 호출되어 xml에 정의된대로 View객체가 생성되어 메모리에 올라간다.

 

 

- 레이아웃 리소스 파일: res/laytou/activity_main.xml

 

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView_01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView By XML" />

</LinearLayout>

 

 

- Java코드 파일: MainActivity.java

 

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // activity_main.xml 파일로 화면을 표시한다.
        setContentView(R.layout.activity_main);
    }
}

 

 

- Kotlin코드 파일: MainActivity.kt

 

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        // activity_main.xml 파일로 화면을 표시한다.
        setContentView(R.layout.activity_main)
    }
}

2. 코드로 화면 표시

XML 레이아웃 리소스 파일 없이, Java나 Kotlin 코드만으로 레이아웃과 뷰를 생성하여 그릴 수 있다.

 

 

- Java코드 파일: MainActivity.java

 

public class MainActivity extends AppCompatActivity {

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

        // 리니어 레이아웃 생성
        LinearLayout layout = new LinearLayout(this);

        // 텍스트뷰 생성
        TextView textView = new TextView(this);
        textView.setText("TextView by Java Code");

        // 리니어레이아웃에 텍스트뷰 추가
        layout.addView(textView);

        // 코드로 생성한 레이아웃을 화면에 표시
        setContentView(layout);
    }
}

 

 

- Kotlin코드 파일: MainActivity.kt

 

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 리니어 레이아웃 생성
        val layout = LinearLayout(this);

        // 텍스트 뷰 생성
        val textView = TextView(this);
        textView.text = "TextView by Kotlin Code";

        // 리니어레이아웃에 텍스트뷰 추가
        layout.addView(textView);

        // 코드로 생성한 레이아웃을 화면에 표시
        setContentView(layout);
    }
}

각각의 실행 결과는 아래와 같다.(동일하다)

 


일반적으로 UI를 표현하는 레이아웃 부분과, 로직은 관리하는 코드부분은 분리하여 작성하는 것이 유지보수에 좋다.

 

따라서 기본적인 UI 및 레이아웃은 XML파일로 작업하고,

이벤트 및 사용자의 인터랙션으로 인해 필요한 경우에만 코드로 View를 생성하여 표시하는 경우가 많다.

 

댓글