실제 사용하는 앱에서 가로,세로 화면 전환시 자동으로 돌려주는 것이 아니다.
우리는 가로 화면과 세로 화면을 각각 만들어주고 실제 스마트폰에서는 화면을 destroy했다가 다시 create 하는것이다.
layout 폴더 밑에있는 activity.xml 는 세로 화면에 대해 나타낸다.
layout-land 폴더 밑에들어가면 가로화면에 대해 나타낸다.
다만 이떄 android 탐색기에서는 검색되지 않음으로 project Files로 탐색기 모드를 변경해주어야 한다.
..여기서 잠깐
Toast 메세지 띄우는법
Toast 메시지란 화면에 팝업으로 미니 메시지를 띄우는 것을 말한다.
코드는 아래와 같이 구현하며 Toast 클래스의 makeText 메소드를 사용 this(해당 화면에), data(문자열) 을 띄워준다.
LENGTH_SHORT 과 LONG은.. 둘다 써보았지만 같은 결과를 보여준다.
public void showToast(String data){
Toast.makeText(this, data, Toast.LENGTH_SHORT).show();
}
에뮬레이터로 앱 실행시 코드 구성에따라 비정상종료가 될 수 있다.
이는 빌드에 에러는 없었지만 실제 구동시에 버그가 있는 상황으로 이를 분석하기 위해서는 하단에 logcat 메뉴를 이용한다.
verbose로 전체 코드를 다 볼수도 있지만, error로 에러부분만 볼 수도 있다.
NullPointerException 을 조심하자.
오늘 강의부터는 각 Component 들의 선언 및 findViewById는 언급하지 않도록 하겠다.
이어서 화면전환에 대해서는 세로화면에서 입력된 Text를 가로방향에 TextView에 복원하는것이 목표이다.
하기처럼 button 이 눌렸을때 string 변수 name에 editText의 값을 toString으로 문자열을 받아 초기화 해준다.
(이때 button은 세로방향에만 있고 가로방향에 없는 관계로 의 NullPointerException 이 날 수있음으로 조심해주자.
만약 같은 id를 사용하는 button이 세로방향에도 있다면(같은ui구성이라면) NullPointerException 이 나지않는다.)
if(button != null){
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(editText !=null){
name = editText.getText().toString();
showToast("사용자 입력값을 name변수에 할당");
}
}
});
}
위에서 name 에 값을 담아주기 위해서는 하기와 같이 구성이필요하다.
onSavedInstanceState 함수를 이용해 Bundle 객체 outState에 "name" 형태의 key로 저장해준다.
데이터 형식은 json 형식이다..
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("name",name);
}
그리고 앞서 outState에 넣어준 데이터는 onCreate의 savedInstanceState에 들어있게되며
하기와 같이 가로 방향에 구성된 textView2에 name(key) 값을 이용하여 setText 해준다.
if(savedInstanceState != null){
if(textView2 != null){
name = savedInstanceState.getString("name");
textView2.setText(name);
showToast("값을 복원했습니다 : "+ name);
}
}
이로써 우리가 구성한 앱에서 화면전환이 진행될 시 초기 onCreate가 화면을 구성해 주었다가 변환시에 onDestroy로 메모리에서 사라졌다가 다시 가로화면을 구성해준다는 것을 알게되었다.
'개발일지' 카테고리의 다른 글
C++ 스터디 - 템플릿 (0) | 2022.11.07 |
---|---|
안드로이드 프로그래밍 - 화면전환 2 (0) | 2022.11.07 |
안드로이드 프로그래밍 - TouchEvent, KeyEvent (0) | 2022.11.06 |
자바 문법 뽀개기 1-1~15강 (0) | 2022.10.02 |
웹개발 왕초보 4주차 개발일지 (0) | 2022.09.27 |