我正在处理的Android应用程序只有在屏幕大小超过7'时才需要更改屏幕布局。我为陆地和肖像模式创建了大型和xlarge的不同布局。这似乎运作良好。
我使用以下代码来确定屏幕大小并相应地更改布局:
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels, height = dm.heightPixels;
double dd = Math.sqrt(width * width + height * height)/dm.densityDpi;
double diagonal = (dd >= (Math.floor(dd) + 0.5) ? Math.ceil(dd) : Math.floor(dd));
if (diagonal < 7) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
问题:
屏幕布局低于7&#39;&#39;也改为横向模式。上面的代码无法阻止更改。请记住,以下7&#39;&#39;&#39;也创造了。
我在这里做错了什么?
答案 0 :(得分:1)
Android docs有一个很好的部分,介绍如何按屏幕大小支持不同的布局
您只需在新的res
文件夹中创建具有相同名称的布局文件即可。例如:
[如果]您的多窗格平板电脑布局需要至少600dp的屏幕宽度,您应将其放置在layout-sw600dp /
中
您还应该查看Declaring Tablet Layouts for Android 3.2+的文档,因为这描述了创建平板电脑布局的最佳做法。
如果您想锁定方向,我建议您查看我在此总结的this answer:
在res/bools.xml
中创建一个布尔值,然后在res/values-sw600dp
和res/values-xlarge
中重复此步骤
在后两个文件夹中将值更改为false
后,您只需调用:
if(getResources().getBoolean(R.bool.my_boolean)){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
这只会在平板电脑设备上运行代码
答案 1 :(得分:1)
这里有两个因素,第一个是布局文件夹,第二个是您的代码,当您想要为不同的屏幕表示不同的布局时,您应该使用layout
,layout-sw600dp
和layout-sw720dp
。在这种情况下,文件夹layout
中的布局是设备的布局,低于7 in and the
layout-sw600dp'表示最小尺寸为7'in的设备的布局和文件夹{{1直到10英寸的设备。
第二个因素是应用这些布局的方向,这可以使用 Configuration.class 在layout-720dp' represents the layouts for the devices bigger that 7
方法中轻松实现:
onCreate()