在Android上为手机和平板电脑设置不同的方向

在Android上为手机和平板电脑设置不同的方向,android,screen-orientation,android-orientation,Android,Screen Orientation,Android Orientation,我想在我的应用程序中执行以下操作: 仅适用于手机的纵向模式 平板电脑的纵向模式和横向模式 我知道我可以轻松地更改清单文件中的方向,但这将影响整个应用程序 我还想过创建单独的活动来处理不同的版本,但我不知道如何检测使用该应用程序的设备类型 有人知道如何解决这个问题吗?您必须使用Android屏幕限定符来识别平板电脑: 然后将所需设置放入正确的布局文件夹中。例如,对于大屏幕,可以在布局xml文件中添加属性“方向:纵向|横向”,对于所有其他屏幕,可以添加属性“方向:纵向”。请参见此处的文件夹结构

我想在我的应用程序中执行以下操作:

  • 仅适用于手机的纵向模式
  • 平板电脑的纵向模式和横向模式
我知道我可以轻松地更改清单文件中的方向,但这将影响整个应用程序

我还想过创建单独的活动来处理不同的版本,但我不知道如何检测使用该应用程序的设备类型


有人知道如何解决这个问题吗?

您必须使用Android屏幕限定符来识别平板电脑:

然后将所需设置放入正确的布局文件夹中。例如,对于大屏幕,可以在布局xml文件中添加属性“方向:纵向|横向”,对于所有其他屏幕,可以添加属性“方向:纵向”。请参见此处的文件夹结构:

res/layout/my_layout.xml//正常屏幕大小的布局(“默认”) res/layout small/my_layout.xml//小屏幕布局 res/layout large/my_layout.xml//大屏幕布局 res/layout xlarge/my_layout.xml//超大屏幕布局 res/layout xlarge land/my_layout.xml//面向景观的超大布局


看看谷歌指南:

我想你可以做一些小技巧,试试使用
配置

  switch (this.getResources().getConfiguration().screenLayout) {
        case Configuration.SCREENLAYOUT_SIZE_SMALL:
                return "small";
            case Configuration.SCREENLAYOUT_SIZE_NORMAL:
                return "normal";
            case Configuration.SCREENLAYOUT_SIZE_LARGE:
                return "large";
            case 4: // screen xlarge 
                return "xlarge";
            default:
                return "undefined";
            }
        }

谢谢

您遇到的问题不幸变成了灰色地带。我们可以破解手机的密度和设备的物理尺寸。但并没有什么真正决定我们,什么是手机,什么是平板电脑。手机有时有7英寸高,有些平板电脑专门用作电子阅读器等等,它们的密度和尺寸都可以是任意的


但是,上面Santacrab建议的表格可以与适当的布局属性一起使用,这些属性将相应地调整大小,而不管屏幕大小如何。当然,在某些情况下,使用片段分割屏幕和在较小的屏幕上避免屏幕过度拥挤是有意义的,但是从Santacrab分离出来的链接也应该在这方面提供一些很好的指导

您可以使用以下代码区分普通/大屏幕,并相应地阻止方向更改

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

在activity的onCreate方法中,检查应用程序是在手机上运行还是在平板电脑上运行。如果应用程序在手机上运行,请将活动屏幕方向设置为仅纵向

将这些文件添加到您的res文件夹。

res/values/vars.xml:

<?xml version="1.0" encoding="utf-8"?><resources><bool name="is_tablet">false</bool></resources>
<?xml version="1.0" encoding="utf-8"?><resources><bool name="is_tablet">true</bool></resources>
    if (!getResources().getBoolean(R.bool.is_tablet)) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }