【问题标题】:Android - How to lock orientation for different device?Android - 如何锁定不同设备的方向?
【发布时间】:2016-10-07 18:23:52
【问题描述】:

我正在尝试将手机锁定为纵向,将平板电脑锁定为横向。 我通常使用 AndroidManifest.xml - android:screenOrientation="portrait" 但是如何以不同的方式设置平板电脑/手机的方向? 谢谢!

【问题讨论】:

  • 大胆猜测:制作 2 个不同的应用程序?
  • @Rotwang 2 个不同的应用程序是一个非常蹩脚的解决方案
  • @deadfish 但这就是他们在 iDevices 上的做法。那么,所有以苹果为中心的开发者都是lamers吗?
  • 我喜欢你的想法

标签: android locking orientation landscape portrait


【解决方案1】:

最好的解决方案是从 res 文件夹中从特定值加载一个参数。因此,如果您的应用在平板电脑上运行,则屏幕密度必须大于或等于 600dp。

在文件夹中:res/values-sw600dp/ create xml with param:

<resources>
    <bool name="isTablet">true</bool>
</resources>

在文件夹 res/values/ 使用参数创建 xml

<resources>
    <bool name="isTablet">false</bool>
</resources>

之后,您将能够使用此代码检查应用程序是否在平板电脑或手机上运行:

boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
if (tabletSize) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

来源:
https://stackoverflow.com/a/9308284/619673
https://developer.android.com/guide/practices/screens_support.html

【讨论】:

  • 那么没有办法在xml中设置?
  • res 文件夹中的值可以在运行应用程序后使用,恕我直言之前不能。由于 res 文件夹中的多个命名文件夹,即 values-sw600dp 或 values-landscape 您只能处理特定情况。我给你的答案是最好的和安全的。
【解决方案2】:

首先检查设备是智能手机还是平板电脑,然后您可以使用以下代码设置活动的方向

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

您可以查看Determine if the device is a smartphone or tablet?

【讨论】:

    【解决方案3】:

    首先您可以检测您的应用是在智能手机还是平板电脑上运行,请查看以下answer

    现在您可以使用以下代码锁定方向:

    If(isTablet)
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    else
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    

    【讨论】:

      【解决方案4】:

      使用 Java 代码。在您想要进行特殊定位的 java 类中,使用以下代码:

      if ((getResources().getConfiguration().screenLayout &
                  Configuration.SCREENLAYOUT_SIZE_MASK) ==
                  Configuration.SCREENLAYOUT_SIZE_XLARGE) {
              // on a X large screen device ...
              getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
          } else if ((getResources().getConfiguration().screenLayout &
                  Configuration.SCREENLAYOUT_SIZE_MASK) ==
                  Configuration.SCREENLAYOUT_SIZE_LARGE) {
              // on a large screen device ...
              // do everythings you want to do ...
          } else {
              getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
          }
      

      并且在片段中使用“getActivity()”而不是“this”。为了使视图与设备灵活使用,请使用以下代码:

      this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
      

      也许有效。祝你好运。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-17
        • 1970-01-01
        相关资源
        最近更新 更多