根据产品要求,我必须保持应用程序的方向为纵向移动和横向平板电脑。
在调用onCreate()
super.onCreate()
回调中的每个活动设置方向
public static void updateOrientation(Activity activity) {
boolean hasAPI18 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2;
if (isTablet()) {
activity.setRequestedOrientation(hasAPI18 ? ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE : ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
} else {
activity.setRequestedOrientation(hasAPI18 ? ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT : ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
适用于移动设备的工作方案:
结果:在人像活动中,对话框在纵向模式下正常显示。
针对移动设备的错误情况:
结果:在纵向活动上对话框显示在横向模式中,因此只有2/3部分对话框可见。
已验证:
答案 0 :(得分:1)
要解决此问题,我从supportLibraryVersion
更新了23.1.2 to 24.1.1
。我不确定根本原因。我检查了supportLibrary的发行说明,但没有修复与此相关的任何错误。但更新支持库版本帮助我解决了这个问题。希望它会帮助某人
答案 1 :(得分:0)
必须添加值文件夹,如下所示
values (is_tablet=false) Mobile
values-sw600dp (is_tablet=true) 7 inch Tablets
values-sw720dp (is_tablet=false) 10 inch Tablets
在其中添加包含
的bool.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="is_tablet">true</bool>
</resources>
在所有活动和对话框中使用移动设备和横向平板电脑的对话框
获取此值 if(getApplicationContext().getResources().getBoolean(R.bool.is_tablet)){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}else{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
答案 2 :(得分:0)
setRequestedOrientation(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT
? ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT : ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
并在清单中添加以下行。
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
它的工作!