XML을 이용해서 레이아웃 위에 뷰를 만들 수 있다. 반대로 소스코드를 통해서 레이아웃에 뷰를 추가할 수 도 있다. 우선 기본적으로 MainActivity.java를 살펴보자
package com.example.androidexcersice;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
여기서 우선적으로 볼것은 'setContentView'메소드이다.이 메소드를 호출하면, 기본적으로 activity_main.xml 파일을 파라미터로 전달하게 된다. R은 단순히 안드로이드 리소스를 식별하기 위한 변수들을 관리하는 클래스라고 알면 된다.
activity_main.xml을 파라미터로 넘기면 이 레이아웃 파일은 액티비티라는 소스 파일과 연결된다. 그 후 화면이 만들어 지게 되는것이다. 이 액티비티라는 것은 안드로이드의 "화면을 구성하는 기본단위" 이다. 안드로이드 애플리케이션은 항상 하나 이상의 액티비티로 구성이 되게된다.
앱을 실행했을때 처음 보이는 화면을 "메인 액티비티" 라고 부른다. 안드로이드 프로젝트를 만들면 기본적으로 MainActivity.java가 기본적으로 생성 되는데, MainActivity.java는 메인 액티비티를 위한 자바 소스파일이 되는것이다. 그리고 이 메인 액티비티는 AndroidManifest.xml파일 안에 등록되게 된다.
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
메인 액티비티를 바꾼다고 가정하자. 아래와 같이 LayoutCodeActivity.java를 작성해 주자.
package com.example.androidexcersice;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.LinearLayout;
public class LayoutCodeActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout mainLayout = new LinearLayout(this);
mainLayout.setOrientation(LinearLayout.VERTICAL);
// 레이아웃 안에 추가될 뷰들에 설정할 파라미터이다.
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, // width
LinearLayout.LayoutParams.WRAP_CONTENT // height
);
// 버튼에 파라미터를 설정하고 레이아웃에 추가한다.
Button button1 = new Button(this);
button1.setText("Button"); // 버튼의 텍스트 설정
button1.setLayoutParams(params);
mainLayout.addView(button1);
setContentView(mainLayout);
}
}
그리고 앞에서 말했듯이 메인 액티비티 정보는 AndroidManifest.xml에 저장된다고 했다. 이 값을 변경하여, 메인 액티비티를 바꿔보자 <activity>태그 안에 android:name속성값을 ".(파일명)"으로 바꿔주면 된다.
<activity
android:name=".LayoutCodeActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
변경 후 애뮬레이터를 돌려보면 위와 같이 버튼 하나가 나오는것을 볼 수 있다. 위 코드를 간단하게 분석해보자.
setContentView
자바 코드로 작성한 레이아웃 혹은 레이아웃 파일(XML)을 넘기면 해당 레이아웃이 화면에 표시된다.
new LinearLayout()
linearlayout 레이아웃을 만들 수 있다. this키워드가 들어가는데, 이는 Context객체를 의미한다. 일반적인 Context는 프로그래밍 언어에서 객체의 정보를 담고있는 것을 의미한다. 안드로이드에서 Context는 UI 구성 요소인 뷰에 대한 정보를 확인할 수 있도록 하는 객체이다.
setOrientation()
LinearLayout은 기본적으로 Vertical(세로방향), Horizontal(가로방향)을 지정해 주어야 한다.상수 LinearLayout.VERTICAL 혹은 LinearLayout.HORIZONTAL 중 하나를 넣어서 지정할 수 있다.
this 키워드
this키워드는 Context객체가 전달된 것이다. 안드로이드에서 new연산자를 사용해 뷰객체를 만들때는 항상 Context객체가 전달되어야 한다. LoadActivity에서 상속받은 AppConpatActivity클래스는 Context를 상속하므로, 이 클래스 안에서는 this를 Context객체를 사용할 수 있는 것이다. 만약 Context를 상속받지 않는 클래스라면, getApplicationContext라는 메소드를 호출해 앱에서 참조가 가능한 Context객체를 사용해야한다. 안드로이드에서 컨텍스트란 뷰에대한 정보를 가지고 있는 객체를 의미한다.
LayoutParams 객체
LayoutParam객체는 뷰 배치를 위한 속성을 설정할 수 있게해주는 객체이다. 이 객체는 레이아웃에 추가되는 뷰의 속성 중 레이아웃과 관련된 속성을 담고 있다. 가로와 세로는 필수 값이며, LayoutpParams의 상수 MATCH_PARENT, WRAP_CONTENT중 하나를 사용할 수 있다.
addView()
addView메소드를 사용하면, 레이아웃에 뷰를 추가할 수 있다.
stetLayoutParams()
뷰 객체의 레이아웃 설정을 해준다
'Android' 카테고리의 다른 글
[Android] 텍스트를 클립보드에 복사하기 (0) | 2022.03.27 |
---|---|
[Android] Table Layout (0) | 2022.03.26 |
[Android] View의 Margin과 Padding (0) | 2022.03.26 |
[Android] 뷰 정렬하기 (0) | 2022.03.26 |
[Android] 간단한 버튼 레이아웃 만들기 (0) | 2022.03.20 |