Android:如何根据设备类型(平板电脑、手机)设置强制设备方向?

3

我需要根据设备类型设置强制方向,以使用相关视图(平板电脑横屏视图和移动设备竖屏视图),设备上无法更改旋转。

因为我想在应用程序启动时为所有活动设置方向,所以我认为我应该在主活动中识别设备类型,该主活动由与视图相关的其他活动扩展。

请问如何以正确的方式做到这一点?

非常感谢任何建议。


可能是为手机提供肖像,为平板提供横向(Android布局)的重复问题。 - Hussein El Feky
4个回答

5

在您的主活动(启动器活动)或应用程序类中使用此功能。

if (isTablet(mContext))
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
            else
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    public static boolean isTablet(Context context) {
            return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK)
                    >= Configuration.SCREENLAYOUT_SIZE_LARGE;
        }

我猜应该是在Application中,而不是在MainActivity中(如果使用Application Context的话)... - Wooff
@Madhur,你的意思是我应该在MainApplication.java文件中使用上面的代码吗?(我正在开发一个React Native项目) 并且在你的上面的代码中,是否有任何声明或使用的变量也需要我导入? - Shubham Bisht

2
这是您的答案来自其他帖子
以下是使用资源大小限定符的好方法。
将此bool资源放在res/values中,命名为bools.xml或任何名称(文件名称在此处不重要):
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="portrait_only">true</bool>
</resources>

把这个放在res/values-sw600dp和res/values-xlarge文件夹中:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="portrait_only">false</bool>
</resources>

然后,在您的活动的onCreate方法中,您可以这样做:
if(getResources().getBoolean(R.bool.portrait_only)){
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

最小宽度方向超过600dp的设备,或者在Android 3.2之前的大屏幕设备(基本上是平板电脑),将像正常情况一样,根据传感器和用户锁定的旋转等进行操作。其他所有设备(基本上是手机)只能竖屏显示。

2
请查看此处的文档:http://developer.android.com/google/play/publishing/multiple-apks.html 多APK支持可以用于此目的。但是,对于(看起来)微小的请求来说,这是一个强大的武器。
基本上,您可以在清单文件中使用<supports-screens>元素过滤目标设备,然后定义android:screenOrientation。因此,您需要为不同的设备创建单独的APK文件。

0
如果您想为您的活动设置固定方向,则可以在manifest.xml中使用。
android:screenOrientation="portrait" or 
android:screenOrientation="landscape"

如果你不想让它被修复,那么你可以使用下面的代码来获取屏幕尺寸。

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

相应地

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接