안녕하세요?


이번 포스팅에서는 한개의 레이아웃의 일부에 다른 레이아웃 일부를 띄우는 방법을 실습해 보았으며, 그 내용을 포스팅 하고자 합니다.



먼저 SampleLayoutInflater라고 이름을 지은 새 프로젝트를 생성합니다. 그리고 나서 package explorer윈도우에서 우클릭을 해서 새 Activity-Empty Activity를 클릭하면 위 스크린샷처럼 화면이 뜹니다. 여기다가 저는 MenuActivity라고 이름을 지어서 새 액티비티를 추가하였습니다.



다음으로는 acitivity_menu.xml로 들어가도록 합니다. 제약 레이아웃으로 되어 있는 레이아웃설정을 Text탭으로 들어가서 LinearLayout으로 바꾸도록 합니다. 그리고 나서 바뀐 리니어 레이아웃의 orientation속성을 아래의 스크린샷과 같이 지정하는 것을 잊지 않도록 합니다.



다음은 design탭으로 들어온 다음에 텍스트뷰를 추가한 다음, width를 match_parent로 지정하도록 합니다. 그리고 나서 텍스트뷰에 들어가는 문구는 [버튼을 눌러 부분화면을 추가하세요]라고 지정을 합니다. 그리고 나서 다음은 버튼을 추가하도록 합니다.



다음으로는 버튼의 onClick속성을 button1click라고 지정을 해서, 향후 있을 코딩작업에 사용을 하도록 합니다. 이렇게 버튼에 관한 속성까지 지정을 하였다면, 다음은 LinearLayout을 추가할 차례입니다.



위 스크린샷에서 보실 수 있다 시피, 추가된 리니어 레이아웃은 수직(vertical)로 orientation속성을 지정된 것을 추가하였고, 처음에는 레이아웃의 ID가 지정이 안 되어 있는데, 여기다가 ID로 Linear1이라고 지정을 하도록 합니다.



다음은 안드로이드 스튜디오 상에서 package explorer에서 우클릭을 한 다음 Layoutresource file이라는 것을 클릭하여서 위 스크린샷과 같은 화면을 띄우도록 합니다. 여기서 새로 추가될 레이아웃은 리니어 레이아웃이며, 이름은 sub1.xml으로 지정을 하도록 합니다.



다음은 새로 추가한 sub1.xml레이아웃에다가 텍스트뷰를 위 스크린샷처럼 추가한 다음 [부분화면1]이라고 글자를 입력하도록 합니다. 그리고 나서 다음은 체크박스를 추가하는데, 일단 체크박스의 ID는 위 스크린샷처럼 check1으로 지정을 하도록 하고, 텍스트는 [동의합니다]로 지정을 합니다.



다음은 언제나 그렇듯이 MainActivity.java로 가서 코딩을 시작하도록 합니다. 우선 위 스크린샷에서 밑줄을 그은 부분은 바로 code1이라는 변수를 선언하는 것입니다. 이 변수는 아래와 같은 구문에 사용이 되도록 합니다.



원래 사용이 되려면 아래와 같이 되어야 하기는 합니다. 


LinearLayout 변수이름1 = (LinearLayout)findViewById(R.id.추가된 레이아웃의 ID);


이 구문은 변수이름이 위에서 추가된 리니어 레이아웃이라고 지정하는 구문이 됩니다. 하지면 여기서는 왜 위에서 나온 스크린샷처럼 LinearLayout 변수이름1; 만이 먼저 선언되어 있냐고 하면, 나중에 여기서 선언한 code1은 아래의 다른 구문에서 쓰이기에 이렇게 본격적인 구문이 사용되기 전에 Global 변수로서 선언을 하는 것입니다.



다음은 버튼을 누르면 그 기능이 실행될 수 있도록 코딩을 시작합니다. 이번 코딩에서 제일 윗줄은 이전에 포스팅에서 다른 적이 있었기 때문에 넘어가지만, 이후의 구문은 다음과 같습니다.


LayoutInflater 변수이름2 = (LayoutInflater)getSystemService(Context.LAYOUT)INFLATER_SERVICE);

변수이름2.Inflate(R.layout.불러올 레이아웃의 이름, 변수이름1,true);


저는 자바를 잘 모르기 때문에 저게 정확하게 무슨 뜻이다 하기는 힘듧니다. 하지만 이렇게 코딩을 하는 것으로 위에서 activity_menu.xml에 추가를 하였던 리니지 레이아웃에다가 다른 레이아웃의 내용을 그대로 가져올 수 있게 되는 것입니다.



다음은 sub1.xml에 있는 체크박스를 조절하는 구문입니다. 이 구문은 원래 다음과 같이 되어 있습니다.


CheckBox 변수이름3 = (CheckBox)변수이름1.findViewById(R.id.체크박스의 ID);

변수이름3.setText("원하는 문구")'


저는 여기서 왜 변수이름1이 들어가는 지는 잘은 모릅니다. 하지만 이 체크박스가 acitivity_menu.xml안에 있는 것이 아니라 sub1.xml에 있는 것이기 때문에, activity_menu.xml에 관계가 된 java파일에 있는 코딩으로는 그냥은 안되고, 일일히 이 체크박스가 activity_menu.xml에 어디에 있는지를 지정해야 하는 듯 합니다.



다음은 AndroidManifest.xml에 가서 위에서 표시된 부분을 바꾸어 줍니다. 여기서 처음에는 위에는 MainActivity라고 되어 있었고, 아래에는 MainActivity라고 되어 있는 것을 서로 뒤 바꾸어 줍니다. 이렇게 바꾸면, 앱을 실행시 제일 처음에 MenuActivity가 실행되도록 됩니다.



다음은 USB케이블에 연결된 스마트폰에서 직접 앱을 실행시킨 결과입니다. 일단 제일 처음에는 제가 의도한 대로 activity_menu.xml에 나오는 것을 확인할 수 있습니다. 하지만 버튼을 눌렀을 때 앱이 치명적인 에러가 발생하였다면서 그냥 멈추는 것을 볼 수 있었는데, 어디가 문제인지 점검을 하였습니다.



찾아보니 제가 했는 실수가 MenuActivity.java인줄 알고 지금까지 MainActivity.java에다가 코딩을 해서 발생한 문제였습니다. 그래서 모든 코딩내용을 MenuActivity.java에 붙여넣기를 해서 다시금 USB에 연결된 스마트폰에서 앱을 실행시켜 확인해 보았습니다.



버튼을 누르자 제 의도되로 Linear1이라고 ID가 지정된 레이아웃에 sub1.xml이 뜨는 것을 확인할 수 있었습니다. 이것으로 여러가지 유용해 보이는 기능을 실습해서 습득하는 데 성공했다는 생각이 듭니다.

+ Recent posts

티스토리 툴바