【问题标题】:Have a fixed orientation based on screen size具有基于屏幕尺寸的固定方向
【发布时间】:2012-10-31 12:28:34
【问题描述】:

我有一个构建在手机上的 Android 应用程序,我现在将对其进行更新以支持平板电脑大小的屏幕(尤其是 Galaxy Tab 10.1)。我想出了整个res/layout 的事情,所以没关系。但是,我将我的应用程序构建为在AndroidManifest.xml 中具有固定的屏幕方向,设置为android:screenOrientation="portrait"

现在,我想要以下内容:为每个屏幕尺寸设置一个固定方向,一个固定为纵向(布局小),另一个固定为横向。

使用res/layout-small-landres/layout-large-port 不能满足我的要求,因为它仍然会从纵向切换到横向再返回。更糟糕的是,当我将手机旋转到横向时,应用程序会崩溃,因为 res/layout-small-land 不存在。

我可以通过定义 XML 文件来做到这一点,还是必须添加代码?

【问题讨论】:

  • 你在Activity标签中定义了android:configChanges="keyboardHidden|orientation" 吗?
  • 没有。但这似乎是方向改变的时候。当平板电脑处于纵向模式并启动应用程序时,我还希望它以横向模式运行。
  • 您要为哪种类型的设备设置横向模式?我的意思是(hdpi/ldpi/mdpi)?我想你必须提到这一点。即使您想根据设备屏幕布局更改方向,也不要将固定方向放在该活动的清单文件中。请尝试并告诉我。
  • 我想要large 或更大的屏幕为横向,normal 或更小的屏幕为纵向。
  • 在此处查看接受的答案:Stack Overflow[1] 它看起来像您的答案。 [1]:stackoverflow.com/questions/2402639/…

标签: android android-layout layout


【解决方案1】:

您可以使用setRequestedOrientation,而不是固定清单上的方向。在每个活动的onCreate 方法上,检查您是否使用平板电脑或智能手机并设置所需的方向。

另一个选项可能是Creating Multiple APKs for Different Screen Sizes,这取决于您的需要。

【讨论】:

    【解决方案2】:

    是的,您可以创建相同的布局。在此处查看接受的答案:SO

    它会解决你的问题。

    更新

    如果您想根据屏幕尺寸进行设置,请参阅下面的代码以获取屏幕的密度。并基于此和屏幕尺寸,您必须以编程方式设置方向。

    检查密度的代码:

    public void ScreenSupport(){
         Display display = getWindowManager().getDefaultDisplay();
         DisplayMetrics dm = new DisplayMetrics();
         display.getMetrics(dm);
    
         int width = display.getWidth();
         int height = display.getHeight();
         int density = dm.densityDpi;
         String densityString = null;
    
         if(density == DisplayMetrics.DENSITY_HIGH) {
             densityString = "HDPI";
         } else if(density == DisplayMetrics.DENSITY_MEDIUM) {
             densityString = "MDPI";
         } else if(density == DisplayMetrics.DENSITY_LOW) {
             densityString = "LDPI";
         }else if(density == DisplayMetrics.DENSITY_DEFAULT) {
             densityString = "DEFAULT";
         }
    
        /* System.out.println("Screen Height is: "+height+ " and Width is: "+width);
         System.out.println("Screen Support: "+densityString);*/
    }
    

    【讨论】:

    • 否,因为当我旋转设备时它不会阻止应用程序旋转。我想根据屏幕尺寸固定方向。
    • 听我的朋友,有不同的布局可以支持所有可用的设备。您只需停止从清单中修复方向,然后运行您的应用程序。它会起作用。正如我之前尝试过的那样。
    • 我确实从清单中删除了修复,有一个res/layout-large-land 和一个res/layout-small-port,当我旋转设备时,应用会旋转(因为当平板电脑在在纵向模式下,选择small-port 布局)。我不要那个;我想修复基于屏幕尺寸的方向。
    • Okkk... 所以如果你只想根据屏幕大小设置修复布局,那么你只能通过Java代码来完成。
    【解决方案3】:

    只需从 manifest.xml 中删除 android:screenOrientation="portrait"

    并添加 layout-large-land,layout-small-land 并保留 layout-large,layout-small 文件夹。

    希望它对你有用。享受编码:)

    【讨论】:

    • 这不会在我旋转设备时阻止应用旋转。
    猜你喜欢
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多