Bạn cần một ví dụ Display
trước hết:
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
Sau đó, định hướng có thể được gọi như thế này:
int orientation = display.getOrientation();
Kiểm tra định hướng như theo cách của bạn và sử dụng để định hướng thay đổi:
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Tôi hy vọng nó giúp.
Cập nhật:
Được rồi, chúng ta hãy nói rằng bạn đã là một var oAllow
đó là Boolean
và giá trị mặc định là False
.
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getOrientation();
switch(orientation) {
case Configuration.ORIENTATION_PORTRAIT:
if(!oAllow) {
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
break;
case Configuration.ORIENTATION_LANDSCAPE:
if(!oAllow) {
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
break;
}
}
Bạn có thể thêm nhiều lựa chọn hơn.
Tôi đã không thử mẫu này, nhưng ít nhất là cho bạn biết một số manh mối về cách giải quyết. Cho tôi biết nếu bạn có bất kỳ lỗi nào.
CẬP NHẬT
getOrientation()
đã bị phản đối see here. Thay vào đó hãy sử dụng getRotation()
.Để kiểm tra xem điện thoại đang ở chế độ phong cảnh bạn có thể làm một cái gì đó như thế này:
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE))
.getDefaultDisplay();
int orientation = display.getRotation();
if (orientation == Surface.ROTATION_90
|| orientation == Surface.ROTATION_270) {
// TODO: add logic for landscape mode here
}
Nguồn
2012-02-29 23:58:03
Bạn không cần phải để đánh chặn các yêu cầu và sau đó cho phép hoặc từ chối nó. Bạn có thể khóa hoặc tự do định hướng trước. Ngoài ra còn có nhiều tùy chọn hơn với phương pháp này, chẳng hạn như có cho phép xoay 180 độ khi bị khóa hay không. Vui lòng đọc câu trả lời của tôi bên dưới, thay vì câu trả lời được chọn. –