# 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를 생성하여 표시하는 경우가 많다.
'개발(Development) > Android(안드로이드)' 카테고리의 다른 글
[안드로이드] this와 MainActivity.this의 개념, 차이 (0) | 2021.07.13 |
---|---|
[안드로이드] LayoutParams(레이아웃 파라미터) 개념과 구조/종류 (0) | 2021.07.12 |
[안드로이드] Entry Point, Launcher, 4대 컴포넌트 개념 (0) | 2021.07.11 |
[안드로이드] R.java / R.jar 개념 및 위치: 리소스 식별 변수 관리 원리 (0) | 2021.07.11 |
[안드로이드] 매니페스트(AndroidMainfest.xml) 개념과 구조 (0) | 2021.07.11 |
댓글