纵向和横向 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 相机预览仍显示横向?