티스토리 뷰
단말 방향 전환
1 2 3 4 5 6 7 8 | 1. 병렬 리소스 로딩 방식 사용 2. [res] 폴더 안에 [layout] 폴더와 [layout-land] 폴더 생성 land 폴더는 안드로이드 자체에서 인식을 하는데 일반적인 layout 폴더는 -> 일반적인 세로 파일 layout-land 폴더는 -> 가로 파일 3. 단말 방향을 바꾸게 되면 메인 엑티비티를 종료해버리고 -> 다시 메인 액티비티를 생성해버린다.(여기서 데이터가 날라가는 현상이 발생되는데, 여기서 데이터를 어떻게 유지 할지를 생각해 봐야한다) | cs |
Example_Orientation 프로젝트 생성 (첫번 째 방법)
1. 생명주기 처럼 onCreate에서 작동하는지 확인 해보자
2. onDestory() , onStart() , onStop() , onResume(), onPause() 생성해서 Toast메시지를 띄워보도록 하자
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 package com.example.example_orientation;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.Toast;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Toast.makeText(this,"onCreate() 호출됨",Toast.LENGTH_LONG).show();}@Overrideprotected void onStart() {super.onStart();Toast.makeText(this,"onStart() 호출됨",Toast.LENGTH_LONG).show();}@Overrideprotected void onStop() {super.onStop();Toast.makeText(this,"onStop() 호출됨",Toast.LENGTH_LONG).show();}@Overrideprotected void onDestroy() {super.onDestroy();Toast.makeText(this,"onDestroy() 호출됨",Toast.LENGTH_LONG).show();}@Overrideprotected void onPause() {super.onPause();Toast.makeText(this,"onPause() 호출됨",Toast.LENGTH_LONG).show();}@Overrideprotected void onResume() {super.onResume();Toast.makeText(this,"onResume() 호출됨",Toast.LENGTH_LONG).show();}}cs
3. app-> res -> new -> Android Resoure directory (directory name: layout-land) landscape(가로를 말한다) 생성
4. 이때, app로는 보이지가 않는다. project로 볼 수 있도록한다.(안드는 없는것처럼 처리)
layout 폴더에 있던 xml파일을 layout-land 폴더로 복사 붙여 넣기를 한다.
5. layout/activity_main.xml (세로)
layout-land/activity_main.xml (가로)
두개의 파일이 존재한다
이렇게해서 가로,세로 구분하는 TextView를 작성해보고 -> 가로 단말과 세로 단말에서의 생명주기가 어떻게 나오는지를 확인해보자.
6. 원래 가로 있던것이 없어지고 세로로 다시 만들어 진다.
이렇게 만들어 버리면 데이터가 날라가 버린다.
이제 이렇게 날라가는 데이터를 어떻게 할것인가?
1. 안드로이드에서는 방법을 제공해준다
2. onSaveInstanceState() 메소드를 재정의 하면 상태를 저장할 수 있다.
이것은 onCreate에서 복원할 수 있다.
3. 이제 main.java 에서 button 이벤트를 만들어보자.(저장시키기위한)
EditText,Button 아이디 값을 가져온다.
4. onSaveInstanceState()메소드를 활용하여 값을 저장한다
generate -> override -> onSaveInstanceState()
5. editText의 아이디 값을 같게 지정해준다. (layout,layout-land xml파일 값이 참조되야하므로)
6. layout xml파일
12345678910111213141516171819202122232425262728293031323334353637 <?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.example_orientation.MainActivity"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="세로방향"android:textSize="20dp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"tools:layout_editor_absoluteY="232dp" /><EditTextandroid:id="@+id/editText"android:layout_width="wrap_content"android:layout_height="wrap_content"android:ems="10"android:inputType="textPersonName"tools:layout_editor_absoluteX="89dp"tools:layout_editor_absoluteY="115dp" /><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="상태저장"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"tools:layout_editor_absoluteY="327dp" /></android.support.constraint.ConstraintLayout>cs
7. layout-land xml파일
123456789101112131415161718192021222324252627282930 <?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.example_orientation.MainActivity"><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="가로방향"android:textSize="30dp"tools:layout_editor_absoluteX="239dp"tools:layout_editor_absoluteY="134dp" /><EditTextandroid:id="@+id/editText"android:layout_width="wrap_content"android:layout_height="wrap_content"android:ems="10"android:inputType="textPersonName"app:layout_constraintHorizontal_bias="0.957"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent" /></android.support.constraint.ConstraintLayout>cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.example_orientation.MainActivity"> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="가로방향" android:textSize="30dp" tools:layout_editor_absoluteX="239dp" tools:layout_editor_absoluteY="134dp" /> <EditText android:id="@+id/editText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" android:inputType="textPersonName" app:layout_constraintHorizontal_bias="0.957" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> </android.support.constraint.ConstraintLayout> | cs |
<결과>
방향을 돌렸을 때 Activity가 Destory -> Create 가 된다는것을 알 수 있다. 이 상태 변화를 어떻게 관리 할까? 가로와 세로의 상태를 유지하는데 코드가 길어지는데, 그렇지 않게도 할수 있는데 이것을 한번 만들어 보도록 하자.(두번째 방법)
새로운 프로젝트를 작성 해보자 (Example_Orientation2)
1. generate -> override -> onConfigurationChanged() 생성 이것은 메서드 설정이 바뀔때 호출되는 메소드 이다.
2. onConfigurationChanged() 메서드에서 코드를 작성해보자
1234567891011121314151617181920212223242526 package com.example.example_orientation;import android.content.res.Configuration;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.Toast;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overridepublic void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){Toast.makeText(this,"가로 방향됨",Toast.LENGTH_LONG).show();}else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){Toast.makeText(this,"세로 방향됨",Toast.LENGTH_LONG).show();}}}cs
3. 이제 메니페스트에가서 등록을 시켜야한다. (이게 그냥 호출되지 않고 메니페스트에서 설정을 바꿔야 호출이 된다.)
123456789101112131415161718192021222324 <?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.example_orientation"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"android:configChanges="orientation|screenSize|keyboardHidden">// 오리엔테이션 스크린사이즈 이런것이 들어가면 단말 방향 바꼈을때// 액티비티 새로 생성되지않고 유지된다.<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>cs
<결과>
토스트 메시지만 나오므로 생략하겠음.
'Android' 카테고리의 다른 글
[Android] 알림 대화 상자 만들기 (0) | 2017.09.24 |
---|---|
[Android] 토스트와 대화상자 (0) | 2017.09.24 |
[Android] 키 입력 이벤트 처리하기 (0) | 2017.09.24 |
[Android] 다양한 위젯과 이벤트 활용하기(터치이벤트) (0) | 2017.09.24 |
[Android] 위험 권한 부여 하기 (0) | 2017.09.24 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- node.js
- 알고리즘
- Controller
- C언어
- Spring
- 초보자를 위한 C언어 300제
- 감자코딩
- MVC
- db
- Android
- node
- 스프링
- 백준알고리즘
- 백준
- 안드로이드
- 프로그래밍
- 개발하는 관광이
- 감자개발자
- 복습
- 머신러닝
- 리버싱
- C langauge
- Algorigm
- 노드
- TensorFlow
- 텐서플로우
- BFS
- 코드엔진
- programming
- 학교
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함