=================================
=================================
=================================
출처: http://minche.tistory.com/22
안드로이드 폰의 슬라이드가 열리고(landscape), 닫혀서(portrait) 화면이 전환될 때
필요한 처리를 삽입하는 부분입니다.
아래 코드와 같이 액티비티 코드 내에 onConfigurationChanged() 함수를 오버라이딩하여 사용하면 됩니다.
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.i(LOGTAG, "=== onConfigurationChanged is called !!! ===");
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { // 슬라이드 닫힐때
Log.i(LOGTAG, "=== Configuration.ORIENTATION_PORTRAIT !!! ===");
} else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { // 슬라이드 열릴때
Log.i(LOGTAG, "=== Configuration.ORIENTATION_LANDSCAPE !!! ===");
}
}
=================================
=================================
=================================
출처: http://bhnbhn.tistory.com/entry/Android-Portrait-Landscape-Mode-%EC%97%90-%EB%94%B0%EB%A5%B8-Activity-%EC%A0%81%EC%9A%A9
#1. Portrait, Landscape Mode Check
1)
getWindowManager().getDefaultDisplay().getOrientation();
2)
int screenHeight = getWindow().getWindowManager().getDefaultDisplay().getHeight();
int screenWidth = getWindow().getWindowManager().getDefaultDisplay().getWidth();
if (screenWidth > screenHeight) { }
3)
public void onConfigurationChanged (Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == newConfig.ORIENTATION_PORTRAIT) {
} else {
}
}
** onConfigurationChanged() 를 override 하기 위해서는 Activity를 상속받아야 한다.
#2. Portrait, Landscape에 따른 XML을 각각 구성
- res/layout-land
- res/layout-port
=================================
=================================
=================================
Resource에서 화면(layout) 정의
· 세로 화면 :/res/layout-port/~.xml
· 가로 화면 :/res/layout-land/~.xml
· 회전 상태 확인
· Android 2.1
WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
//--- orientation : 0. 세로, 1. 가로
int orientation = display.getOrientation();
· Android 2.2
WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
//--- Surface.ROTATION_0 : 세로
//--- Surface.ROTATION_90 : 가로
//--- Surface.ROTATION_180 : 세로
//--- Surface.ROTATION_270 : 가로
int rotation = display.getRotation();
· 화면 회전 금지 방법 1
· AndroidManifest.xml에서 모든 Activity에 다음을 추가 한다.
android:screenOrientation="portrait" //--- 세로 화면 고정
android:screenOrientation="landscape" //--- 가로화면 고정
· 화면 회전 금지 방법 2
//--- public void onCreate(Bundle savedInstanceState) 함수에서
//--- setContentView(~); 다음에 아래 라인을 추가 한다.
//--- 세로 화면 고정
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//--- 가로 화면 고정
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
· 화면이 회전해도 Activity가 다시 로딩되지 않도록 하는 방법
· Activity가 다시 로딩되지 않으므로 화면의 크기는 변하지 않는다. 따라서 수작업으로 화면을 조정해 주어야 한다.
· AndroidManifest.xml에서 모든 Activity에 다음을 추가 한다.
android:configChanges="keyboardHidden|orientation"
· 모든 Activity에 다음을 추가 한다.
@Override
public void onConfigurationChanged(ConfigurationnewConfig) {
super.onConfigurationChanged(newConfig);
switch(newConfig.orientation) {
caseConfiguration.ORIENTATION_PORTRAIT:
//--- 수작업으로 세로 화면 생성
break;
caseConfiguration.ORIENTATION_LANDSCAPE:
//--- 수작업으로 가로 화면 생성
break;
}
}
· 화면 회전시 정보를 저장한 후 복구하는 방법
· public void onCreate(Bundle savedInstanceState)에 복구와 관련된 코딩을 한다.
Object obj = getLastNonConfigurationInstance()
if (obj != null) {
HashMap<String, Object> map = (HashMap<String, Object>) obj;
//--- 저장된 복구 데이터로 화면 또는 Thread를 복구 한다.
}
· public void onDestroy()에 화면 종료와 관련된 코딩을 한다.
public void onDestroy() {
if(isFinishing()) {
//--- 화면이 종료될 때, Thread 처리 등을 한다.
//--- worker.interrupt();
//--- worker = null;
} else {
//--- 화면이회전할 때
}
super.onDestroy();
}
· public Object onRetainNonConfigurationInstance()에 화면 회전시 데이터를 저장하는 코딩을 한다.
public Object onRetainNonConfigurationInstance() {
HashMap<String, Object> map = null;
map = newHashMap<String, Object>();
//--- 화면 또는 Thread에서 복구할 데이터를 저장 한다.
return map;
}
· 참고 문헌
· 안드로이드 UI 디자인 패턴, 2010.5.19 by Google
· Icon Design Guidelines, Android 2.0
· Supporting MultipleScreens, 2010.5
· 화면 회전을 빠르게 처리하기 (Faster Screen Orientation Change),2010.6
*** 참고 문헌 ***
=================================
=================================
=================================
안드로이드 회전 막기
Jmnote
android activity rotation lock안드로이드 화면회전 막기, 안드로이드 액티비티 방향 고정안드로이드 화면 고정, 안드로이드 회전 고정
목차[숨기기] |
핵심코드
- Activity 클래스의 onCreate 메소드에 아래와 같은 코드 추가
세로로 고정 (길게)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
→ 정방향 세로로 완전히 고정. 회전불가
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
→ 역방향 세로 가능. 즉 180도 회전은 가능가로로 고정 (넓게)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
→ 정방향 가로로 완전히 고정. 회전불가
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
→ 역방향 가로 가능. 즉 180도 회전은 가능
전체코드 예시
- MainActivity.java를 수정한 예시
- 최초 실행되는 MainActivity에 적용되며, 액티비티가 여러 개라면 각 클래스마다 설정해야 함
- 세로 방향으로 고정됨
package com.example.myfirstapp; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
=================================
=================================
=================================
출처:http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=android&wr_id=14
안드로이드는 화면 회전시(가로=>세로로 전환 또는 반대) oncreate를 다시 호출하기 때문에 기본적으로 내용이 페이지를 처음 열었을때와 같이 변경됩니다. 이를 방지하기 위한 방법 입니다. 주요시스템 변경은 onConfigurationChanged를 이용해 감지할 수 있습니다 orientation: 스크린이 세로에서 가로로 바뀌는것 keyboardHidden: 키보드가 보여지거나 숨겨지는것. fontScale: 사용자가 원하는 폰트의 크기를 변경하는것. locale: 사용자가 언어 세팅을 변경하는것. keyboard: 키보드의 종류가 바뀌는것. 1. AndroidMainfest 정의 <activity android:configchanges="orientation|keyboardhidden"></activity> 2. Source Code 에 추가하기 1 @Override 2 public void onConfigurationChanged(Configuration newConfig) { 3 super.onConfigurationChanged(newConfig); 4 /* 5 // 위 소스만 적용했을때 내용이 유지되고 추가 코드를 입력할때는 아래와 같이 한다 6 if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) 7 // 가로모드로 변경되었을때 8 if (newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO) 9 // 키보드가 보여질때 10 */ 11 } 12 3. Configuration http://developer.android.com/reference/android/R.attr.html#configChanges http://developer.android.com/reference/android/content/res/Configuration.html |
전체댓글수 2
- 활화산ㅋ 10-08-11 08:13 소스보기
- 적용해 보아야겠네요
- 루지메이앙 10-08-12 19:12 소스보기
- configchanges="orientation|keyboardhidden 를
configChanges="orientation|keyboardHidden 로 바꿔야 되네요..
대소문자 구분이 안되었네요;
=================================
=================================
=================================
'스마트기기개발관련 > 안드로이드 개발' 카테고리의 다른 글
안드로이드 리스트 메모리 오버플로우, 개선 관련 (0) | 2020.09.18 |
---|---|
안드로이드 Dialog창에 테두리 없애기, 투명도 주기,배경투명도, 꾸미기 관련 (AlertDialog, popup, Dialog 등등 (0) | 2020.09.18 |
안드로이드 플레그먼트 레이아웃 관련 (0) | 2020.09.18 |
안드로이드 동영상 재생 관련 (0) | 2020.09.18 |
안드로이드 타이머 구현 관련 (0) | 2020.09.18 |