【问题标题】:Portrait and Landscape Android App纵向和横向 Android 应用
【发布时间】:2015-08-14 04:55:17
【问题描述】:

我是安卓新手。我仍然处于学习模式。我被要求开发一个应用程序,第一个要求是在电话上应用程序只能是纵向的,而在平板电脑上只能是横向的。

我已经通过通常的默认文件夹布局开发了纵向模式的应用程序,并且在清单中我设置为 android:screenOrientation="portrait"

现在对于横向,我想如果我创建带有“layout-sw600dp-land”之类的文件夹,将自动从该文件夹中为平板电脑调用 xml,但随后意识到清单中提供了默认方向,因此它始终是纵向的。

所以现在的问题是我如何实现手机(纵向 - 不应该发生横向)和平板电脑(横向 - 不应该发生)

我是否必须为横向创建相同的 Java 和布局 (XML)(在清单中设置),还是只有更改文件夹的简单方法?

【问题讨论】:

标签: android android-layout


【解决方案1】:

好的,我要提出的解决方案可能不是完美的解决方案,但我确信它会奏效。

不过,这将依赖于一个假设:

  • 平板电脑的屏幕必须大于手机的屏幕。

首先获取 X 和 Y 的像素大小:

WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);

double width = size.x;
double height = size.y;

现在,你要做的就是找到标准平板电脑的高度和宽度,如果它大于或等于普通平板电脑的高度和宽度,那么你就可以这样做了:

if(width > normalTabletWidth && height > normalTabletHeight){
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}else{
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

【讨论】:

    【解决方案2】:

    您应该使用 android 的 getDisplay()... 通常平板电脑的显示屏尺寸为 6.5 或 7 英寸或更大,而手机的显示屏尺寸小于 6.5 英寸...因此比较显示属性,然后决定将屏幕模式更改为横向或纵向...

    【讨论】:

      【解决方案3】:

      我也遇到了同样的问题,然后我找到了解决方案。

      首先您必须为您的平板电脑声明布局文件夹,例如:

      layout-sw360dp/ : 720p screens 
      

      layout-sw540dp/ : 1080p screens

      然后,在这些文件夹中定义您的布局文件。但它不会解决纵向和横向问题。

      为了使您的应用具有响应性,您还必须声明一些 XML 文件。

      bool 资源放入res.values 以检查屏幕大小。

      bool.xml (mobile)
       <?xml version="1.0" encoding="utf-8"?>
      <resources>
          <bool name="portrait_only">true</bool>
          <bool name="landscape_only">false</bool>
      </resources>
      
      // bool.xml (sw600dp)
      <?xml version="1.0" encoding="utf-8"?>
      <resources>
          <bool name="portrait_only">false</bool>
          <bool name="landscape_only">true</bool>
      </resources>
      
      // bool.xml (sw720dp)
          <?xml version="1.0" encoding="utf-8"?>
          <resources>
              <bool name="portrait_only">false</bool>
              <bool name="landscape_only">true</bool>
          </resources>
      

      添加这些资源后转到您的MainActivity.java 文件及以上:

      setContentView(R.layout.activity_main);
      

      添加此检查:

      @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              // locking out landscape screen orientation for mobiles
              if(getResources().getBoolean(R.bool.portrait_only)){
                  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
              }
              // locking out portait screen orientation for tablets
              if(getResources().getBoolean(R.bool.landscape_only)){
                  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
      
              }
      
              setContentView(R.layout.activity_main);
      }
      

      为了正确更改方向,您应该在清单中的活动标签中添加以下内容:

      <activity 
          android:name="com.ABC"
          android:configChanges="keyboardHidden|orientation|screenSize">
      </activity>
      

      这样就可以了。

      【讨论】:

        猜你喜欢
        • 2015-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多