2012-07-20 26 views
5

Khi tôi lật điện thoại Android của mình lộn ngược, Hoạt động của tôi không xoay để hiển thị bố cục lộn ngược nhưng vẫn ở chế độ ngang thay thế. Tôi đã thử điều này với một ứng dụng HelloWorld rất đơn giản. Tôi đã thêm android:configChanges="orientation" vào tệp kê khai và ghi đè onConfigurationChange() trong Hoạt động để đặt điểm ngắt tại đó. Xoay ngược thiết bị tạo ra một thay đổi cấu hình để đi từ chân dung (upside up) sang phong cảnh nhưng không có thay đổi thứ hai từ cảnh quan đến chân dung (lộn ngược). Đây có phải là vấn đề về Android hay không, tôi có cần phải làm gì không?Xoay ngược không kích hoạt thay đổi cấu hình

Manifest:

<?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> 

Hoạt động:

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

Bạn có chắc chắn thiết bị của mình thực hiện việc này không? Tôi hiếm khi thấy các ứng dụng cho phép điều này. – DeeV

+0

Tôi chưa từng thấy hành vi này với một số ứng dụng chuẩn (Cài đặt, trình duyệt, v.v.) mà tôi đã thử nhưng có thể với 'android: screenOrientation =" fullSensor "' –

Trả lời

7

Đó không phải là vấn đề, đó là cách Android hoạt động. Nó xem ngược xuống chỉ trong chế độ phong cảnh và không ở chân dung (và trong cảnh quan từ phiên bản 2.2 nếu tôi nhớ chính xác). Thay đổi cấu hình xảy ra khi nó chuyển từ dọc sang ngang và ngược lại. Nếu bạn muốn kiểm tra xem điện thoại đã bị lật ngược hay theo bất kỳ hướng nào, bạn sẽ phải truy cập cảm biến gia tốc kế. Dưới đây là tutorial về cách sử dụng và tại đây bạn có SensorManager docs.

EDIT: với tư cách là tác giả của câu hỏi phát hiện ra, thêm android:screenOrientation="fullSensor" vào tệp kê khai của bạn là đủ, miễn là bạn không muốn hỗ trợ bất kỳ thứ gì cũ hơn Android 2.3 (API cấp 9).

+0

Bạn có liên kết đến tài liệu Android mô tả điều này không ? –

+2

Thực ra, nếu tôi thêm android: screenOrientation = "fullSensor" Tôi nhận được hành vi mong muốn. –

+0

Vấn đề là, nó sẽ không chạy trên Android cũ hơn 2.3 (API cấp 9). Hoặc là tôi sai? Bạn đã thử nó chưa? –

3

Bao gồm screensize trong configChanges của bạn trong mafifest của bạn:

android:configChanges="orientation|screenSize" 

Từ http://developer.android.com/guide/topics/resources/runtime-changes.html:

Bắt đầu với Android 3.2 (API cấp 13), "kích thước màn hình" cũng thay đổi khi thiết bị chuyển đổi giữa hướng dọc và ngang. Do đó, nếu bạn muốn ngăn khởi động lại thời gian chạy do thay đổi định hướng khi phát triển cho API cấp 13 trở lên (như được khai báo bởi thuộc tính minSdkVersion và targetSdkVersion), bạn phải bao gồm giá trị "screenSize" ngoài giá trị "định hướng". Đó là, bạn phải decalare android: configChanges = "orientation | screenSize". Tuy nhiên, nếu ứng dụng của bạn nhắm mục tiêu cấp API 12 trở xuống thì hoạt động của bạn luôn xử lý thay đổi cấu hình này (thay đổi cấu hình này không khởi động lại hoạt động của bạn, ngay cả khi chạy trên thiết bị Android 3.2 trở lên).

3

Đặt android:screenOrientation="fullSensor" hoàn thành những gì tôi đang cố gắng làm.

Các vấn đề liên quan