我想在我的应用程序中执行以下操作:
- 仅适用于手机的纵向模式
- 平板电脑的纵向模式和横向模式。
我知道我可以轻松更改清单文件中的方向,但这会影响整个应用程序。
我还考虑过创建单独的活动来处理不同的版本,但我不知道如何使用应用程序检测设备的类型。
有谁知道如何解决这个问题?
我想在我的应用程序中执行以下操作:
我知道我可以轻松更改清单文件中的方向,但这会影响整个应用程序。
我还考虑过创建单独的活动来处理不同的版本,但我不知道如何使用应用程序检测设备的类型。
有谁知道如何解决这个问题?
您可以使用以下代码来区分普通/大屏幕并相应地阻止方向更改。
public static boolean isTablet(Context context) {
return (context.getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK)
>= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
在活动的 onCreate 方法中检查应用程序是在手机上还是在平板电脑上运行。如果应用程序在手机上运行,请将活动屏幕方向设置为仅纵向。
将这些文件添加到您的 res 文件夹中。
资源/值/vars.xml:
<?xml version="1.0" encoding="utf-8"?><resources><bool name="is_tablet">false</bool></resources>
res/values-sw600dp/vars.xml:
<?xml version="1.0" encoding="utf-8"?><resources><bool name="is_tablet">true</bool></resources>
在关闭所有活动的 onCreate 方法中添加以下代码:
if (!getResources().getBoolean(R.bool.is_tablet)) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
您必须使用 Android 屏幕限定符识别平板电脑:
然后,您将所需的设置放入正确的布局文件夹中。例如,您可以仅在布局 xml 文件中为大屏幕添加属性orientation:portrait|landscape ,为所有其他人添加orientation:portrait 。在此处查看文件夹结构:
res/layout/my_layout.xml // 正常屏幕尺寸的布局(“默认”) res/layout-small/my_layout.xml // 小屏幕尺寸的布局 res/layout-large/my_layout.xml // 大屏幕的布局size res/layout-xlarge/my_layout.xml // 超大屏幕布局 res/layout-xlarge-land/my_layout.xml // 横向超大布局
看看谷歌指南:http: //developer.android.com/guide/practices/screens_support.html
i suppose you can do small trick for it, try use Configuration.screenLayout
:
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";
}
}
thanks
不幸的是,您遇到的问题变成了灰色地带。我们可以破译手机的密度和设备的物理尺寸。但是没有什么能真正决定我们,什么是手机,什么是平板电脑。由于手机有时 7 英寸高,而一些平板电脑仅用作电子阅读器等,它们实际上可以是任何密度或尺寸。
但是,上面 Santacrab 建议的表格可以与适当的布局属性一起使用,无论屏幕大小如何,这些属性都会相应地调整大小。当然,在某些情况下,使用片段来拆分屏幕和在较小的屏幕上以避免屏幕过度拥挤是有意义的,但是从 Santacrab 链接衍生的链接也应该提供一些很好的指导。