具有基于屏幕尺寸的固定方向

Posted

技术标签:

【中文标题】具有基于屏幕尺寸的固定方向【英文标题】:Have a fixed orientation based on screen size 【发布时间】:2012-10-31 12:28:34 【问题描述】:

我有一个构建在手机上的 android 应用程序,我现在将对其进行更新以支持平板电脑大小的屏幕(尤其是 Galaxy Tab 10.1)。我想出了整个res/layout 的事情,所以没关系。但是,我将我的应用程序构建为在AndroidManifest.xml 中具有固定的屏幕方向,设置为android:screenOrientation="portrait"

现在,我想要以下内容:为每个屏幕尺寸设置一个固定方向,一个固定为纵向(布局小),另一个固定为横向。

使用res/layout-small-landres/layout-large-port 不能满足我的要求,因为它仍然会从纵向切换到横向再返回。更糟糕的是,当我将手机旋转到横向时,应用程序会崩溃,因为 res/layout-small-land 不存在。

我可以通过定义 XML 文件来做到这一点,还是必须添加代码?

【问题讨论】:

你在Activity标签中定义了android:configChanges="keyboardHidden|orientation" 吗? 没有。但这似乎是方向改变的时候。当平板电脑处于纵向模式并启动应用程序时,我还希望它以横向模式运行。 您要为哪种类型的设备设置横向模式?我的意思是(hdpi/ldpi/mdpi)?我想你必须提到这一点。即使您想根据设备屏幕布局更改方向,也不要将固定方向放在该活动的清单文件中。请尝试并告诉我。 我想要large 或更大的屏幕为横向,normal 或更小的屏幕为纵向。 在此处查看接受的答案:Stack Overflow[1] 它看起来像您的答案。 [1]:***.com/questions/2402639/… 【参考方案1】:

您可以使用setRequestedOrientation,而不是固定清单上的方向。在每个活动的onCreate 方法上,检查您是否使用平板电脑或智能手机并设置所需的方向。

另一个选项可能是Creating Multiple APKs for Different Screen Sizes,这取决于您的需要。

【讨论】:

【参考方案2】:

是的,您可以创建相同的布局。在此处查看接受的答案:SO

它会解决你的问题。

更新

如果您想根据屏幕尺寸进行设置,请参阅下面的代码以获取屏幕的密度。并基于此和屏幕尺寸,您必须以编程方式设置方向。

检查密度的代码:

public void ScreenSupport()
     Display display = getWindowManager().getDefaultDisplay();
     DisplayMetrics dm = new DisplayMetrics();
     display.getMetrics(dm);

     int width = display.getWidth();
     int height = display.getHeight();
     int density = dm.densityDpi;
     String densityString = null;

     if(density == DisplayMetrics.DENSITY_HIGH) 
         densityString = "HDPI";
      else if(density == DisplayMetrics.DENSITY_MEDIUM) 
         densityString = "MDPI";
      else if(density == DisplayMetrics.DENSITY_LOW) 
         densityString = "LDPI";
     else if(density == DisplayMetrics.DENSITY_DEFAULT) 
         densityString = "DEFAULT";
     

    /* System.out.println("Screen Height is: "+height+ " and Width is: "+width);
     System.out.println("Screen Support: "+densityString);*/

【讨论】:

否,因为当我旋转设备时它不会阻止应用程序旋转。我想根据屏幕尺寸固定方向。 听我的朋友,有不同的布局可以支持所有可用的设备。您只需停止从清单中修复方向,然后运行您的应用程序。它会起作用。正如我之前尝试过的那样。 另请参阅:***.com/questions/2124046/… 我确实从清单中删除了修复,有一个res/layout-large-land 和一个res/layout-small-port,当我旋转设备时,应用会旋转(因为当平板电脑在在纵向模式下,选择small-port 布局)。我不要那个;我想修复基于屏幕尺寸的方向。 Okkk... 所以如果你只想根据屏幕大小设置修复布局,那么你只能通过Java代码来完成。【参考方案3】:

只需从 manifest.xml 中删除 android:screenOrientation="portrait"

并添加 layout-large-land,layout-small-land 并保留 layout-large,layout-small 文件夹。

希望它对你有用。享受编码:)

【讨论】:

这不会在我旋转设备时阻止应用旋转。

以上是关于具有基于屏幕尺寸的固定方向的主要内容,如果未能解决你的问题,请参考以下文章

尺寸等级和 Plus 电话

mediaelement.js - 具有固定最大尺寸的响应式视频

IOS - 将背景图像缩放到不同的屏幕尺寸并将标签放在固定位置上

如何添加约束以使视图的尺寸在方向改变时不会改变?

具有 vw 和 vh 的响应式网站,当屏幕太小时,尺寸保持相同的尺寸 (px)

支持各种屏幕尺寸