2012-03-05 21 views
31

Tôi đang sử dụng . Trong đó, khi tôi đang thay đổi từ LandScape thành Portrait, nó đang gọi if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) và chuyển sang Portrait từ LandScape. Nhưng khi tôi thay đổi từ Portrait thành Land-Scape, nó không thay đổi thành LandScape vì nó đang gọi if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) vì vậy, nó không thay đổi từ LandScape thành Portrait. Xin vui lòng giúp đỡ.Cách sử dụng onConfigurationChanged() và newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE trong android 2.3.3

public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 

     //int orientation = this.getResources().getConfiguration().orientation; 

     if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
      Log.d("Entered to change as Portrait ","PPPPPPPPPPPPPPPPP"); 
      setContentView(R.layout.settings); 
     } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
      Log.d("Entered to change as LandScape ","LLLLLLLLLLLLLLLLLLLL"); 
      setContentView(R.layout.settings); 
     } 

    } 

Trả lời

39

Chỉ cần viết mã dưới đây vào onConfigurationChanged phương pháp và kiểm tra

if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){ 

    Log.e("On Config Change","LANDSCAPE"); 
}else{ 

    Log.e("On Config Change","PORTRAIT"); 
} 

và viết android:configChanges="keyboardHidden|orientation" vào tập tin của bạn như manifiest này

<activity android:name="TestActivity" 
      android:configChanges="keyboardHidden|orientation"> 

nó làm việc ở bên cạnh tôi, tôi hy vọng nó sẽ giúp bạn.

Nếu bạn trên máy tính bảng cũng thêm |screenSize-android:configChanges

+12

Nếu bạn trên máy tính bảng cũng thêm '| screenSize' để android: configChanges –

3

Vấn đề là với android:configChanges="orientation|keyboardHidden".

nếu bạn xóa |keyboardHidden từ androidmanifest.xml, thì onConfigurationChanged chỉ được kích hoạt khi bạn xoay từ ngang sang dọc, chứ không phải khi bạn đi từ dọc sang ngang (ít nhất là trong trình mô phỏng mặc định).

Hy vọng điều này sẽ hữu ích.

0

Viết dòng này trong android manifest.xml file:

<activity 
    android:name="MyActivity" 
    android:configChanges="orientation|keyboardHidden" /> 
15

bạn cũng nên biết:

Chú ý: Bắt đầu với Android 3.2 (API mức 13), các "màn hình kích thước" cũng thay đổi khi thiết bị chuyển giữa hướng dọc và ngang hướng. Do đó, nếu bạn muốn ngăn khởi động lại thời gian chạy do thay đổi 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 "định hướng" Giá trị . Tức là, bạn phải decalare android: configChanges = "orientation | screenSize". Tuy nhiên, nếu cấp API ứng dụng 12 hoặc thấp hơn, thì hoạt động của bạn luôn là 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ị cao hơn Android 3.2 hoặc ).

0

Ngoài câu trả lời ở trên: Nếu bạn ghi đè lên các phương pháp onConfigurationChanged kết hợp với cập nhật của file manifest bạn đang nói bạn đang xử lý các configurationchanges mình. Do đó nói thêm:

setContentView(R.layout.layout.xml); 

Trong onConfigurationChanged phương pháp của bạn - nơi bố trí là file layout của bạn - sẽ khắc phục vấn đề.

1

Viết mã bên dưới vào tệp hoạt động của bạn.

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){ 
    Log.e("On Config Change","LANDSCAPE"); 
    } 
    else{ 
    Log.e("On Config Change","PORTRAIT"); 
    } 

} 

Cũng viết dưới đây mã trong file manifest của bạn như sau:

<activity 
     android:name=".activities.TestActivity" 
     android:configChanges="orientation|screenSize|keyboardHidden" 
/> 
Các vấn đề liên quan