【问题标题】:Portrait for phone, landscape for Tablet (Android-Layout)手机纵向,平板横向(Android-Layout)
【发布时间】:2011-12-01 20:58:00
【问题描述】:

所以我正在为 Android 制作一个应用程序,我想强制平板电脑的横向方向和手机的纵向方向。但是,似乎我只能根据我所看到的进行方向锁定,这违背了希望设备有两个单独方向的目的。

平板电脑:横向 手机:纵向

说得更专业些。

我在“res/layout-xlarge-land”中有一个布局,用于在平板电脑上美化,我在“res/layout”中有原始布局,我只想明确地为平板电脑使用 layout-xlarge-land。没有别的,基本上只为 xlarge 设备使用横向。

谢谢!

【问题讨论】:

    标签: java android android-layout orientation


    【解决方案1】:

    我不完全确定您在说什么,但您似乎应该衡量分辨率并采取相应措施。我的意思是,除了分辨率不同之外,您怎么知道它是手机还是平板电脑?

    【讨论】:

    • 好吧,我想把它说得更具技术性。我在“res/layout-xlarge-land”中有一个布局,用于在平板电脑上美化,我在“res/layout”中有原始布局,我只想明确地为平板电脑使用 layout-xlarge-land。没有别的,基本上只为 xlarge 设备使用横向。
    • 您可以在代码中指定如何布局屏幕并根据屏幕尺寸从适当的布局 xml 中拉取。
    【解决方案2】:

    根据设备密度设置特定方向可能不起作用,因为有些手机的密度高于平板电脑。

    我所做的是通过在清单文件的活动标记中设置属性来禁用设备的方向传感器,如下所示:

    android:screenOrientation="nosensor"
    

    当您运行您的应用程序时,默认情况下为手机设置纵向,为平板电脑设置横向(因此它将从layout-xlarge-land 中选择xml 文件)。而且由于您设置了方向锁定,因此它会保持此方向。

    【讨论】:

    • 对我来说不太管用,我的 Nexus 7 被视为手机并以纵向模式显示。
    • 我的回答解决了这个问题,请检查一下
    • 你是如何设置方向锁定的?
    【解决方案3】:

    您可以测量设备的实际尺寸(以英寸为单位),然后使用以下方法以编程方式设置方向:

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    

    要获取设备的物理尺寸,您可以使用发布的代码here

    它不是 100% 准确,但足以确定运行应用程序的设备之王。

    【讨论】:

      【解决方案4】:

      在“layout-large”文件夹布局中的布局菜单上设置一个名为 llTablet 的布局,在“layout”文件夹中的布局菜单上设置一个 llPhone 布局。菜单是指用户输入的第一个布局。然后检查是否可以引用它。如果您不能引用 llPhone,那么它就是平板电脑。

      llPhone = (LinearLayout) findViewById (R.id.llPhone)
      if (llPhone == null) {
       tablet = true;
      }
      else {
       tablet = false;
      }
      

      【讨论】:

        【解决方案5】:

        给用过的人

        android:screenOrientation="nosensor"
        

        并且没有单独工作我在我的基本活动中除了这个 sn-p 之外还使用了它

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
                    && (this.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) < Configuration.SCREENLAYOUT_SIZE_LARGE) {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            }else if((this.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE){
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            }
            super.onCreate(savedInstanceState);
        }
        

        【讨论】:

          猜你喜欢
          • 2012-03-26
          • 2014-03-14
          • 1970-01-01
          • 1970-01-01
          • 2013-02-27
          • 1970-01-01
          • 2017-11-24
          • 2020-08-29
          • 1970-01-01
          相关资源
          最近更新 更多