안드로이드 with 자바/자잘한 문제들

java 코드에서 화면 구성

백_곰 2021. 12. 22. 17:23

1. setContentView

- 이 메서드가 호출되면 자신의 레이아웃 파일을 파라미터로 전달하여 액티비티라 불리는 소스 파일과

연결이 된다.

 

 

 

2. java 코드에서 레이아웃 추가하기

- 따로따로 분리하여 작성하면, 레이아웃의 구성을 바꿀 때 java 소스 코드를 건들 필요가 없는 

장점이 있다.

 

- 그러나 화면 레이아웃을 미리 못 만들거나 바로바로 필요할 때마다 레이아웃을 만들어야 할 경우

java 소스 코드에서 구성할 수도 있다.

 

- 예를 들면, 어떤 이벤트가 일어날 경우, 유형에 따라 화면 구성을 바꾸는 것이 있다.

 

 

- 아래의 코드를 보자.

package com.example.exercise001;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

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

        LinearLayout mainLinearLayout = new LinearLayout(this);
        mainLinearLayout.setOrientation(LinearLayout.VERTICAL);

        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT
        );

        Button btn1 = new Button(this);
        btn1.setText("Button");
        btn1.setLayoutParams(params);
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://m.naver.com"));
                startActivity(intent);
            }
        });
        mainLinearLayout.addView(btn1);

        setContentView(mainLinearLayout);
    }
}

(키워드 this가 눈에 보일 것인데, 이것은 Context 객체가 전달된 것이다.)

(즉, new 연사자를 이용하여 뷰 객체를 만들 떄는 항상 Context 객체가 전달 되어야 한다.)

(다시 말해 모든 UI 객체들은 Context 객체를 전달 받도록 되어 있는 것이다.)

(AppCompatActivity 클래스는 Context를 상속하므로 이 클래스 안에서는 this를 Context 객체로 사용할 수 있다.)

(만약 상속받지 않았더라면, getApplicationContext라는 메서드를 호출한다.)

 

(레이아웃에 뷰를 추가하고 싶다면 addView() 메서드를 사용하면 된다.)

 

(이렇게 직접 코드를 넣은 후, 마지막에 setContentView 메서드에 파라미터로 레이아웃을 넣어주면 완성이 된다.)