具有基于屏幕尺寸的固定方向
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-land
和res/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 文件夹。
希望它对你有用。享受编码:)
【讨论】:
这不会在我旋转设备时阻止应用旋转。以上是关于具有基于屏幕尺寸的固定方向的主要内容,如果未能解决你的问题,请参考以下文章
mediaelement.js - 具有固定最大尺寸的响应式视频
IOS - 将背景图像缩放到不同的屏幕尺寸并将标签放在固定位置上