仅针对大型设备更改布局方向

时间:2016-08-15 08:26:14

标签: android android-screen-support

我正在处理的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;也创造了。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

Android docs有一个很好的部分,介绍如何按屏幕大小支持不同的布局

您只需在新的res文件夹中创建具有相同名称的布局文件即可。例如:

  

[如果]您的多窗格平板电脑布局需要至少600dp的屏幕宽度,您应将其放置在layout-sw600dp /

您还应该查看Declaring Tablet Layouts for Android 3.2+的文档,因为这描述了创建平板电脑布局的最佳做法。

如果您想锁定方向,我建议您查看我在此总结的this answer

res/bools.xml中创建一个布尔值,然后在res/values-sw600dpres/values-xlarge中重复此步骤

在后两个文件夹中将值更改为false后,您只需调用:

if(getResources().getBoolean(R.bool.my_boolean)){
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

这只会在平板电脑设备上运行代码

答案 1 :(得分:1)

这里有两个因素,第一个是布局文件夹,第二个是您的代码,当您想要为不同的屏幕表示不同的布局时,您应该使用layoutlayout-sw600dplayout-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()