2012-07-20 3 views
5

Android 휴대 전화를 거꾸로 사용하면 내 활동이 회전하지 않아 레이아웃이 거꾸로 표시되지만 대신 가로 모드로 유지됩니다. 아주 간단한 HelloWorld 앱으로이 작업을 시도했습니다. 나는 매니 페스트에 android:configChanges="orientation"을 추가하고 거기에 중단 점을 설정하기 위해 액티비티에서 onConfigurationChange()을 오버로드했습니다. 장치를 뒤집어서 회전 시키면 초상화 (위쪽을 위로)에서 풍경까지 하나의 구성을 변경하지만 풍경에서 세로로 거꾸로 (거꾸로) 변경하지 않습니다. Android 문제입니까, 아니면 내가해야 할 일이 있습니까?거꾸로 회전해도 구성이 변경되지 않습니다.

매니페스트 :

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="hello.world" 
    android:versionCode="1" 
    android:versionName="1.0" > 
    <uses-sdk android:minSdkVersion="10" /> 
    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:configChanges="orientation" 
      android:name=".HelloWorldActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

활동 : http://developer.android.com/guide/topics/resources/runtime-changes.html에서

android:configChanges="orientation|screenSize" 

:

public class HelloWorldActivity 
    extends Activity 
{ 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    } 

    public void onConfigurationChanged(Configuration newConfig) 
    { 
    super.onConfigurationChanged(newConfig); 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) 
    { 
     Log.e("MDO", "orientation change: landscape"); 
    } 
    else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) 
    { 
     Log.e("MDO", "orientation change: portrait"); 
    } 
    } 
} 
+1

기기에서이 작업을 수행 하시겠습니까? 나는 이것을 허용하는 앱을 거의 보지 못한다. – DeeV

+0

내가 시도한 몇 가지 표준 앱 (설정, 브라우저 등)에서이 동작을 보지 못했지만 'android : screenOrientation = "fullSensor"' –

답변

7

Android의 작동 방식은 문제가되지 않습니다. 그것은 초상화 모드가 아닌 가로 모드에서만 거꾸로 보입니다 (정확하게 기억한다면 버전 2.2의 풍경이 보입니다). 구성 변경은 세로에서 가로로 또는 그 반대로 전환 할 때 발생합니다. 휴대 전화가 거꾸로 뒤집혀 있거나 방향이 틀린 지 확인하려면 가속도계 센서에 액세스해야합니다. 사용 방법은 tutorial이고 여기에 SensorManager docs이 있습니다.

편집 : 질문의 저자가 매니페스트에 android:screenOrientation="fullSensor"를 추가하는 자신을 발견 충분이 은 나이가 아무것도 지원하지 않는 제공 안드로이드 2.3 (API 레벨 9)보다.

+0

이 문서에 설명 된 Android doc에 대한 링크가 있습니까? ? –

+2

사실, android : screenOrientation = "fullSensor"를 추가하면 원하는 동작을 얻습니다. –

+0

문제는 2.3 이전의 Android (Android 9 레벨)에서는 실행되지 않습니다. 아니면 내가 틀렸어? 테스트 해 봤어? –

3

이 mafifest에 configChanges에서 화면 크기를 포함

Android 3.2 (API 레벨 13)부터는 기기가 세로 방향과 가로 방향으로 전환하면 '화면 크기'도 변경됩니다. 따라서 API 레벨 13 이상 (minSdkVersion 및 targetSdkVersion 속성에 의해 선언 된대로)을 개발할 때 방향 변경으로 인해 런타임이 다시 시작되는 것을 방지하려면 "orientation"값 이외에 "screenSize"값을 포함시켜야합니다. 즉, android : configChanges = "orientation | screenSize"를 decalare해야합니다. 그러나 애플리케이션이 API 레벨 12 이하를 목표로하는 경우 활동이 항상이 구성 변경을 처리합니다 (이 구성 변경으로 인해 Android 3.2 이상 기기에서 실행되는 경우에도 활동이 다시 시작되지 않음).

3

설정 android:screenOrientation="fullSensor"은 내가하려는 일을 수행합니다.

관련 문제