这是 API 18 中的一项功能,我无法真正锁定它。我整晚都在阅读如何手动处理您自己的配置更改,并尝试了很多东西,但我目前的代码无效。
目标:我需要有一个 Activity ,在用户拍摄视频(将他们带回应用程序)之后,着陆页应该是横向或纵向,无论哪种方式用户拿着电话。但是如果他们决定去风景,我想锁定那个位置,这样他们就不能回到肖像(如果他们回去会导致视频观看错误)。所以他们一开始有选择,但如果他们选择那个,就必须留在风景中。但我该怎么做呢?
到目前为止,这是我尝试过的:
将这个
android:configChanges="keyboardHidden|orientation|screenSize"
在<activity>
我在 list 中的 Activity 标签。覆盖
onConfigurationChanged()
方法:@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { setContentView(R.layout.activity_make_photo_video_land); } else { setContentView(R.layout.activity_make_photo_video); } if (this.getResources().getConfiguration().orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2){ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED); } }
我有 2 个 xml 布局,一个用于 layout 文件夹中的肖像,一个用于 layout-land 文件夹中的风景。
我得到的结果是,我可以让布局在方向更改时显示,但我无法将其锁定。我正在使用 KitKat
的设备,所以它应该锁定在那里,但它没有。
我在这里读到的关于锁定方向(或它的变通方法)的每一篇文章似乎都已有 3 或 4 年历史,基本上暗示了我已经在尝试的东西。有任何新信息吗?
谢谢。
最佳答案
你试过这个吗?
public static void lockOrientation(Activity activity) {
Display display = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();
int currentOrientation = activity.getResources().getConfiguration().orientation;
int orientation = 0;
switch(currentOrientation)
{
case Configuration.ORIENTATION_LANDSCAPE:
if(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90)
orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
else
orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
break;
case Configuration.ORIENTATION_PORTRAIT:
if(rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_270)
orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
else
orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
}
activity.setRequestedOrientation(orientation);
}
public static void unlockOrientation(Activity activity) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
关于android - ActivityInfo.SCREEN_ORIENTATION_LOCKED 未锁定方向 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29364621/