![](/img/trans.png)
[英]How to lock screen orientation in reverse portrait and reverse landscape mode
[英]How to Lock screen orientation when displaying reverse landscape in android?
我尝试锁定屏幕orientation
Android中application.I二手下面的代码,以锁定屏幕方向,当特定按钮点击火灾。
// Inside button click
Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
if (display.getOrientation() == 1) {
setRequestedOrientation(0);
} else if (display.getOrientation() == 0) {
setRequestedOrientation(1);
} else if (display.getOrientation() == 3) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
上面的代码工作横向和纵向屏幕方向,但它不工作反向景观mode.In这种情况下,始终我的活动改变它的orientation
,以默认landscape
mode.Also我注意到,当装置反向风景模式, display.getOrientation()
总是返回 3。
我怎样才能找到这个问题的解决方案?
我一直在使用 API 8 处理同样的问题。看起来在 reserseLandscape 模式下,如果你调用
getResources().getConfiguration().orientation
Android 将返回 2 (SCREEN_ORIENTATION_USER),它根本不会锁定方向。 实际上,即使该值确实存在,也没有为 ActivityInfo 类定义常量 SCREEN_ORIENTATION_REVERSE_LANDSCAPE。 对于我的应用程序,我最终创建了这个方法:
public void lockScreenOrientation() {
switch (((WindowManager) getSystemService(WINDOW_SERVICE))
.getDefaultDisplay().getRotation()) {
case Surface.ROTATION_90:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
break;
case Surface.ROTATION_180:
setRequestedOrientation(9/* reversePortait */);
break;
case Surface.ROTATION_270:
setRequestedOrientation(8/* reverseLandscape */);
break;
default :
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
每当我需要锁定方向时我都会调用这个方法,然后我可以简单地释放它调用
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
希望能帮助到你。
public void lockScreenOrientation() {
switch (((WindowManager) getSystemService(WINDOW_SERVICE))
.getDefaultDisplay().getRotation()) {
case Surface.ROTATION_90:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
break;
case Surface.ROTATION_180:
setRequestedOrientation(9/* reversePortait */);
break;
case Surface.ROTATION_270:
setRequestedOrientation(8/* reverseLandscape */);
break;
default :
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
autremoi 的答案对我有用,我创建了一个新答案,因为我的声誉还没有让我投票给他。
我的代码唯一的区别是我用另一个恢复了传感器
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
在您的 AndroidManifest 文件中,只需输入以下代码:
android:configChanges="keyboard|orientation|keyboardHidden|screenSize"
android:screenOrientation="reverseLandscape"
例子:
<activity
android:name="com.gaspar.slinfilipino.Quiz"
android:label="@string/title_activity_quiz"
android:configChanges="keyboard|orientation|keyboardHidden|screenSize"
android:screenOrientation="reverseLandscape"
android:parentActivityName="com.gaspar.slinfilipino.SignLanguageMenu" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.gaspar.slinfilipino.SignLanguageMenu" />
</activity>
它对我有效。 希望能帮助到你!
我尝试了 autremoi 的答案,但它杀死了我的用户界面。 我找到了一个确实有效的答案,但是我发现它是混合的: https : //www.captechconsulting.com/blogs/programmatically-locking-android-screen-orientation
而这个: getSize() 给我错误的作品,并且应该在所有 Android 版本上。
与setRequestedOrientation(lockOrientation());
快乐编码!
private int lockOrientation(){
Display display = getWindowManager().getDefaultDisplay();
int rotation = display.getRotation();
Point size = new Point();
size.x = display.getWidth();
size.y = display.getHeight();
int lock = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
if (rotation == Surface.ROTATION_0
|| rotation == Surface.ROTATION_180) {
// if rotation is 0 or 180 and width is greater than height, we have
// a tablet
if (size.x > size.y) {
if (rotation == Surface.ROTATION_0) {
lock = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
} else {
lock = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
}
} else {
// we have a phone
if (rotation == Surface.ROTATION_0) {
lock = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
} else {
lock = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
}
}
} else {
// if rotation is 90 or 270 and width is greater than height, we
// have a phone
if (size.x > size.y) {
if (rotation == Surface.ROTATION_90) {
lock = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
} else {
lock = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
}
} else {
// we have a tablet
if (rotation == Surface.ROTATION_90) {
lock = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
} else {
lock = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
}
}
}
return lock;
}
嗨,如果你想要锁定屏幕方向,你必须设置清单文件
<activity android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait" android:name=".activities.HomeActivity"
android:label="@string/app_name" android:theme="@style/Theme.Translucent">
尝试这个
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
如果你想要肖像
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.