纵向和横向 Android 应用

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

查看此链接***.com/questions/2124046/… 也可以查看这个链接developer.android.com/training/basics/supporting-devices/… 【参考方案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>

这样就可以了。

【讨论】:

以上是关于纵向和横向 Android 应用的主要内容,如果未能解决你的问题,请参考以下文章

Android - 在横向和纵向模式之间切换使 Intent 失去价值

如何以编程方式将我的 android 应用程序锁定为纵向/横向模式?

如何为android中的xml文件调整纵向和横向模式的正确界面

即使我将应用程序清单设置为纵向,为啥我的 Android 相机预览仍显示横向?

即使纵向模式被锁定,Android 应用程序也会自动旋转到横向模式几秒钟

如何旋转纵向/横向 Android 模拟器? [复制]