티스토리 뷰
안녕하세요 :)
이번 포스팅에서 다루어볼 내용은 inter activity(화면 전환) 입니다.
지난 포스팅까지 우리는 이벤트의 발생과 처리, 익명클래스를 이용한 간편한 코딩을 다루었습니다.
이번포스팅에서는 여러가지 xml 파일 간의 이동, 즉 화면전환을 다루어 볼것입니다. 여러 어플리케이션을 보면 버튼을 클릭할시 다른 화면으로 넘어가거나 전환되는 것을 볼수 있습니다. 이번에는 메인화면에서 2가지의 화면중 하나를 선택하여 들어갈수 있고, 다시 메인화면으로 돌아올수 있는 UI를 가진 어플리케이션을 만들어 보겠습니다.
사용된 이미지는 인터넷을 통해 다운받은 무료이미지와 제 증명사진을 이용했습니다, 여러분도 저작권법에 유의해서 뮤료이미지 많이 사용하세용 :)
완성된 어플은 다음과 같습니다.
코드리뷰 시작에 앞서 지금까지의 내용과는 달리 사용된 파일 수가 다소 많아 디렉터리 구조를 먼저 언급하고 넘어가겠습니다.
크게 네가지 디렉터리 내에서 코드를 편집하고 생성해 주어야 합니다.
첫번째로 이미지 파일이 들어있는 디렉터리입니다. 코드 리뷰에서는 다루지는 않는 디렉터리입니다.
두번째로 세가지 레이아웃 xml코드가 담겨질 레이아웃 디렉터리입니다.
세번째는 각각의 레이아웃에 대한 가로세로 화면설정과 관련된 기본파일이 포함된 디렉터리입니다.
마지막으로 동작과 관련된 java 파일이 담겨져있는 디렉터리입니다.
위의 네가지 디렉터리 내의 파일을 편집하고 생성하며 코드리뷰를 진행해보겠습니다.
1. Layout 디렉터리
1-1) 메인 레이아웃
메인 레이아웃의 경우 두가지의 화면 중 하나로 선택하여 넘어갈수 있도록 버튼을 사용했습니다. 임의로 소피아,제임스라는 각 화면에 가명을 부여 하였고 나중에 자바를 통해 동작을 코딩할수 있도록 아이디를 부여했습니다.
1-2) 제임스 레이아웃
제임스 레이아웃은 이미지와 함께 메인화면으로 돌아갈수 있는 버튼태그를 포함시켰습니다. 그리고 백그라운드 속성을 이용하여 배경사진을 삽입해 주었습니다.
1-3) 소피아 레이아웃
소피아 레이아웃의 경우 제임스 레이아웃과 동일하게 코딩해주습니다. 돌아가기 버튼의 아이디를 동일하게 설정해 주어도 자바 코드에서 setContentView 메소드를 사용할때 버튼을 탐색하는 레이아웃을 다르게 해줄수 있기 때문에 영향이 가지 않습니다.
2. java code 디렉터리
2-1) MainActivity.java
메인 화면에 setContentView 메소드를 사용한 자바 코드는 위와 같습니다. xml 코드에서 선언한 두가지 버튼의 아이디를 받아와 b1, b2 라는 버튼 객체에 매핑시켜 주었고 이벤트 발생시 익명클래스에 오버라이딩 된 onClick 메소드가 실행될수 있도록 하였습니다.
여기서 intent 객체를 선언하였고, getApplicationContext 메소드를 사용해 xml코드와 xml코드에 매핑된 자바 class를 불러올수 있게 하였습니다.
이와 같은 과정으로 인해 다른 xml코드로 이루어진 다른 context(화면)으로의 전환이 가능한 것입니다.
그럼 나머지 화면에서 메인화면으로 돌아오는 동작도 비슷한 매커니즘을 통해 동작하면 될것 같지만! 예상과는 조금 다를것 입니다. 저도 처음에는 위의 메소드를 사용해서 메인화면으로 돌아왔습니다. 하지만 이는 인터넷 브라우져를 새로 계속 실행하는것과 똑같은 효과입니다...
(네이버에서 검색을하고 메인화면으로 돌아올때 로고를 클릭하면!, 검색화면이 종료되고 메인화면으로 돌아오는것이지, 검색화면은 그대로 있고 새로운 브라우져창에 새로이 메인화면이 실행되는것이 아니겠죠!)
그렇기 때문에 본래의 화면으로 돌아올때는 그냥 들어갔던 화면을 종료하는 매소드인 finish()를 사용합니다. 코드는 다음과 같습니다.
2-2) 제임스 클래스
2-3) 소피아 클래스
3.레이아웃에 대한 가로세로 화면설정과 관련된 기본파일이 포함된 디렉터리
마지막으로 저는 소피아, 제임스 화면이 가로로 출력됬으면 좋겠어서 다음과 같이 코드를 편집해 주었습니다.
'Development > Andriod App' 카테고리의 다른 글
Android App - 폭탄돌리기 게임 (0) | 2021.05.25 |
---|---|
Android App - 영단기 App (0) | 2021.05.25 |
Android App - Event, using Anonymous Class (1) | 2021.05.25 |
Andriod App - Event (0) | 2021.05.25 |
Android App - Layout (0) | 2021.05.25 |