手机横屏使用竖向布局,平板竖屏使用横向布局(Android-Layout)。

23

所以我正在为Android开发一个应用程序,我想强制平板电脑横向方向,并为手机设置竖向方向。然而,据我所见,似乎只能进行方向锁定,这违反了想要为设备设置两个不同方向的目的。

平板电脑:横向 手机:竖向

更加技术性地说。

我在“res/layout-xlarge-land”中有一个横向布局,用于平板电脑的横向方向,并且我在“res/layout”中有原始布局,我只想显式使用layout-xlarge-land来适配平板电脑。没有别的,基本上仅针对xlarge设备使用横向布局。

谢谢!

5个回答

41

根据设备密度设置特定方向可能无法正常工作,因为有些手机的密度比平板电脑高。

我所做的是通过在清单文件中的活动标签中设置属性来禁用设备的方向传感器,如下所示:

android:screenOrientation="nosensor"

默认情况下,当您运行应用程序时,手机将设置为纵向方向,而平板电脑将设置为横向方向(因此它会从layout-xlarge-land中选择xml文件)。由于您已经设置了方向锁定,因此它将保持在该方向。


7
我的Nexus 7并不适用,它被视为手机并且只能以竖屏模式显示。 - Nezneika
我的回答解决了这个问题,请检查一下。 - Dante
你是如何设置方向锁定的? - W.K.S

2

您可以测量设备的实际尺寸(以英寸为单位),然后使用以下代码进行编程设置方向:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

或者

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

要获取设备的物理大小,您可以使用此处发布的代码。

尽管不是100%准确,但足以确定应用程序运行的设备类型。


0

我不确定你在说什么,但似乎你应该只需测量分辨率并相应地采取行动。我的意思是,除了分辨率不同之外,你怎么知道它是手机还是平板电脑呢?


好吧,更加技术性地说,我在平板电脑上有一个“res/layout-xlarge-land”用于横向布局,而原始布局在“res/layout”中,我只想明确地在平板电脑上使用“layout-xlarge-land”。基本上,仅针对xlarge设备使用横向布局。 - rwarner
你可以在代码中指定如何布局屏幕,并根据屏幕尺寸从适当的布局XML中提取。 - Yevgeny Simkin

0

针对那些使用过

android:screenOrientation="nosensor"

它本身没有起作用,我在我的基础活动中使用了它以及这个片段。

@Override
protected void onCreate(Bundle savedInstanceState) {
    if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
            && (this.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) < Configuration.SCREENLAYOUT_SIZE_LARGE) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }else if((this.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE){
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }
    super.onCreate(savedInstanceState);
}

-2
在“layout-large”文件夹的布局中,设置名为llTablet的布局,并在“layout”文件夹的布局菜单中设置名为llPhone的布局。这里的菜单是指用户进入的第一个布局。然后检查是否可以引用它。如果无法引用llPhone,则表示它是平板电脑。
llPhone = (LinearLayout) findViewById (R.id.llPhone)
if (llPhone == null) {
 tablet = true;
}
else {
 tablet = false;
}

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