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()이다.
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는 자식 뷰들이 많고 복잡할 수록 시간이 많이 소요된다.