본문 바로가기

카테고리 없음

[Android] setContentView(), findViewByid() 함수

반응형

  findViewByid()함수는 안드로이드 개발에서 findViewById() 함수는 리소스 id를 통해서 레이아웃(activity_main.xml에서 작업한)에 있는 뷰 객체들 중 일치하는 뷰를 가져오는 함수이다.

 

setContentView()함수

  그 전에 setContentView()와 같은 메소드로 xml에 있는 리소스들을 지정한 속성에 맞게 인스턴스를 생성하여 메모리에 로드하는 인플레이션 과정이 필요하다.

 

 setContentView()함수는 activity 클래스에서 onCreate()안에 들어간다.

 setContentView()함수는 레이아웃 xml 내용을 파싱하여 뷰를 생성하고, 뷰에 정의된 속성을 설정한다.

 

  @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
…..}

 

setContentView(R.layout.activity_main)의 메소드는 R,layout,activity_main이 있다. 

R은 res 폴더를 의미하고, layout은 R의 내부 클래스, activity_main은 layout의 activity_main을 의미한다.

즉, R.layout.activity_main이 activity_main.xml을 가리키는 ID라는 뜻이다.

 

activity의 setContentView() 함수의 파라미터로 레이아웃 리소스 id를 전달하고 실행하게 되면, activity_main.xml로 만든 레이아웃이 출력이 된다.

 

findViewByid()함수

  화면에 보여지는 레이아웃은 배치만 해놓은 상태라서, 변화를 주거나, 이벤트를 발생시키려면 activity_main.java 자바 소스코드에서 작업을 해줘야한다. 

  그렇기 때문에 main.xml 레이아웃에 설정된 뷰를 가져오는 함수가 findViewById()이다.

 

뷰 id는 속성값 혹은 코드에서 정할 수 있다.

 

import android.view.View;
import android.widget.Button;

   ImageView imgDice1;
   ImageView imgDice2;
   MediaPlayer mp;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

       // 화면에서 만든 버튼과 이미지들을 가져온다.
       Button button = findViewById(R.id.button);
       imgDice1=findViewById(R.id.imgDice1);
       imgDice2=findViewById(R.id.imgDice2);

       // 사운드 파일도 가져온다.
       mp = MediaPlayer.create(this,R.raw.dice_sound);
…..

 

우선 변수를 먼저 선언하고, 해당 변수값에 리소스 id를 불러온다.

<팁> 리소스 id와 변수명이 같으면 후에 작업할 때, 편리하다.

 

단점:

  findViewById는 자식 뷰들이 많고 복잡할 수록 시간이 많이 소요된다.

 

반응형