我有一个基于手机的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文件来实现,还是必须添加代码?
答案 0 :(得分:6)
您可以使用setRequestedOrientation
,而不是在清单上修改方向。在每个活动的onCreate
方法中,检查您是否在平板电脑或智能手机上并设置所需的方向。
另一个选项可能是Creating Multiple APKs for Different Screen Sizes,具体取决于您的需求。
答案 1 :(得分:-1)
是的,您可以为其创建布局。请参阅此处接受的答案: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);*/
}
答案 2 :(得分:-2)
只需从manifest.xml中删除android:screenOrientation="portrait"
添加布局大片土地,布局小土地,并保持布局大,布局小的文件夹。
希望它适合你。享受编码:)