반응형
res 폴더 아래에 layout-land 새 폴더를 만듬, 새로 만든 폴더는 프로젝트를 표시해주기 위해선 좌측 상단의 프로젝트 탭을 안드로이드에서 프로젝트로 바꿔줘야함
layout-land의 이름은 미리 지정된 것. layout 폴더와 같은 역할을 하지만, 단말이 가로 방향으로 보일 때는 layout-land 폴더 안에 있는 xml 레이아웃 파일이 사용된다
layout의 액티비티메인의 텍스트 내용에는 세로 방향, layout-land에 액티비티메인을 복사한 후 텍스트 내용을 가로 방향으로 함
package com.example.a12_sampleorientation;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showToast("onCreate 호출");
}
@Override
protected void onStart() {
super.onStart();
showToast("onStart 호출");
}
@Override
protected void onStop() {
super.onStop();
showToast("onStop 호출");
}
@Override
protected void onDestroy() {
super.onDestroy();
showToast("onDestroy 호출");
}
public void showToast(String data) {
Toast.makeText(this, data, Toast.LENGTH_LONG).show();
}
}
단말 방향 바꾸려면 회전 아이콘 클릭 후 시스템 버튼 옆에 뜨는 회전 모양을 클릭
액티비는 화면에 보이기 전에 메모리에 만들어져야 하는데 그 시점에 onCreate 메소드 호출
그리고 화면에 보이기 전에 onStart 메소드 호출
화면이 없어지면 onStop 메소드 호출
메모리에서 없어지면 onDestroy 호출
메모리에서 없어졌다가 새로 만들어지는 구조이기 때문에, 선언해 두었던 변수의 값이 사라지므로, 변수의 값을 저장했다가 다시 복원하는 onSaveInstanceState 메소드가 있음, 액티비티가 종료되기 전의 상태를 저장함, 이때 저장한 상태는 onCreate 메소드가 호출 될때 전달되는 번들 객체로 복원할 수 있다
액티비티메인에 플레인텍스트, 버튼을 추가. 플레인텍스트의 id를 정해주고, 액티비티메인 xml을 복사해서 layout-land로 붙여넣기한다
package com.example.a12_sampleorientation;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
String name;
EditText editText;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showToast("onCreate 호출");
editText = findViewById(R.id.editText);
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
name = editText.getText().toString();
showToast("입력된 값 저장 : " + name);
}
});
// 화면이 초기화될 때 name 변수의 값 복원
if (savedInstanceState != null) {
name = savedInstanceState.getString("name");
showToast("값을 복원했습니다. : " + name);
}
}
@Override
protected void onStart() {
super.onStart();
showToast("onStart 호출");
}
@Override
protected void onStop() {
super.onStop();
showToast("onStop 호출");
}
@Override
protected void onDestroy() {
super.onDestroy();
showToast("onDestroy 호출");
}
public void showToast(String data) {
Toast.makeText(this, data, Toast.LENGTH_LONG).show();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// name 변수의 값 저장
outState.putString("name", name);
}
}
반응형
'안드로이드' 카테고리의 다른 글
토스트 모양과 위치 바꾸기, 스낵바 띄우기 (0) | 2021.10.12 |
---|---|
단말 방향 전환 - 액티비티는 그대로 유지 (0) | 2021.10.11 |
키 이벤트 (0) | 2021.10.11 |
제스처 이벤트 (0) | 2021.10.11 |
터치 이벤트 (0) | 2021.10.11 |