玩过Android手机的同学们应该都很清楚手机横竖屏的机制吧,大部分游戏都是无法横竖屏切换的, 有的游戏只能竖屏的玩,有的游戏只能横屏玩,为什么开发中要强制游戏为单一的屏幕呢?原因很简单 就是因为切换屏幕后带来的问题过多开发起来过于麻烦所以大多数游戏都会强制横屏或者竖屏。的今天我用一个小例子带同学们盘点一下Android开发中横竖屏切换的一些开发技巧。
1. 强制横竖屏
这种方式是最为简单并且可以避免因为切换屏幕导致的一些开发问题,强制屏幕为横屏或者竖屏可以用两种方式来实现, 第一种为代码实现、第二种为配置文件实现,请同学们阅读下面这段简单的例子。
- importandroid.app.Activity;
- importandroid.content.pm.ActivityInfo;
- importandroid.os.Bundle;
- publicclassHandlerActivityextendsActivity{
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- setContentView(R.layout.handler);
- //强制为横屏
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
- super.onCreate(savedInstanceState);
- }
- }
AndroidManifest.xml 中设置强制横屏
- <activityandroid:name=".HandlerActivity"android:screenOrientation="landscape"/>
通过代码的方式强制为竖屏
- publicclassHandlerActivityextendsActivity{
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- setContentView(R.layout.handler);
- //强制为竖屏
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
- super.onCreate(savedInstanceState);
- }
- }
AndroidManifest.xml 中设置强制竖屏
- <activityandroid:name=".HandlerActivity"android:screenOrientation="portrait"/>
2.横竖屏切换的响应
如果没有设置强制横屏或者竖屏那么每次横竖屏切换的时候Activity都会被重新创建一次,这样就会存在一个问题 横屏后会把图片拉伸可能在竖屏时感觉很协调的界面切换到横屏以后会被拉伸的很难看,比较好的解决办法是为横竖屏做两套图做两个布局文件,这样子程序中只需要监听屏幕切换的结果 设置不同的布局 绘制不同的图片即可。
AndroidManifest.xml 中设置属性禁止重新创建Activity,并且添加屏幕切换监听。
- <activityandroid:name=".HandlerActivity"android:configChanges="orientation|keyboardHidden"/>
设置后屏幕切换后就不会再次调用OnCreate()方法重新创建这个Activity, 切换屏幕之前程序中的一些数据或者内容就不会因为重新创建Activity导致重置清空。 每当切换横竖屏的时候系统会自己调用onConfigurationChanged()方法这样子就可以拿到当前屏幕的横竖屏状态,根据状态就可以做我们想做的事。
- importandroid.app.Activity;
- importandroid.content.res.Configuration;
- importandroid.os.Bundle;
- publicclassHandlerActivityextendsActivity{
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- setContentView(R.layout.handler);
-
- super.onCreate(savedInstanceState);
- }
- @Override
- publicvoidonConfigurationChanged(ConfigurationnewConfig){
-
inttype=this.getResources().getConfiguration().orientation;
-
-
if(type==Configuration.ORIENTATION_LANDSCAPE){
- //切换到了横屏
-
}elseif(type==Configuration.ORIENTATION_PORTRAIT){
- //切换到了竖屏
- }
-
- super.onConfigurationChanged(newConfig);
- }
- }
3.横竖屏切换数据的保存
如果说项目必需要实现横竖屏的切换那么我们就须要对数据进行保存与读取,这也是为什么大部分游戏都不支持横竖屏切换的原因,因为游戏中存在大量的数据 ,比如玩家属性、坐标点、游戏状态、人物属性等等等等实在是太多了。如果要实现正常切换的话那么这些数据都须要进行保存与记录,其实相对软件开发来说做横竖屏切换的到挺多的,毕竟软件当前Activity中保存的数据不会有游戏那么多呵呵,废话就不多说了我分享一个横竖屏切换保存数据与读取数据的方法。
比如横屏切换竖屏实际上是先把当前的横屏的Activity杀掉 然后重新创建一个竖屏的Activity,我们可以使用onSaveInstanceState()方法保存数据,它是在横屏Activity将杀死前调用,可以将须要保存的数据放入Bundle封装在系统中,切换竖屏后这个Activity又重新被创建 这样可以在onCreate(Bundle)或者onRestoreInstanceState(Bundle)方法中来回复之前保存在Bundle中的数据,这样就可以实现横竖屏界面切换数据的保存与读取,当然前提是只能保存Bundle类型的数据,也就是说大量的对象数据的话就要想其它办法来恢复。
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.util.Log;
- publicclassHandlerActivityextendsActivity{
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- setContentView(R.layout.handler);
-
- super.onCreate(savedInstanceState);
- }
-
-
- /**切换屏幕之前将数据保存在Bundle中**/
- @Override
- protectedvoidonSaveInstanceState(BundleoutState){
-
longoutTime=System.currentTimeMillis();
- //屏幕切换将当前的时候保存在Bundle中
- outState.putLong("time",outTime);
- Log.v("InstanceState","outTimeis"+outTime);
- super.onSaveInstanceState(outState);
- }
-
- /**切换屏幕之后在Bundle中把数据取出来**/
- @Override
- protectedvoidonRestoreInstanceState(BundlesavedInstanceState){
- //取出屏幕切换前保存的时间
-
LongsaveTime=savedInstanceState.getLong("time");
-
- Log.v("InstanceState","saveTimeis"+saveTime);
- super.onRestoreInstanceState(savedInstanceState);
- }
- }
看一下效果图红框内的Log信息,outTime 为很横竖切换屏幕之前保存的当前时间,SaveTime为横竖切换屏幕之后读取到之前保存的时间。通过这种方法可以正常的保存与读取数据。
总的来说这一章还是比较简单的,真的很不好意思最近MOMO实在是太忙了,每天写程序到凌晨 3 点多 早上 7点多又得爬起来上班。博客更新的也没之前快了,不过我可是时刻都惦记着大家伙和我的开发群中的好朋友们,总之还是那句老话MOMO希望可以通过写博客结识更多的开发者与更多的好朋友,我们一起为中国移动互联网的明天而努力,加油。哇咔咔!!
本文出自 “雨松MOMO的程序世界” 博客,请务必保留此出处http://xys289187120.blog.51cto.com/3361352/656804
相关推荐
在Android中要让一个程序的界面始终保持一个方向,不随手机方向转动而变化的办法: 只要在AndroidManifest.xml里面配置一下就可以了。 在AndroidManifest.xml的activity(需要禁止转向的activity)配置中加入...
【Android游戏开发之九】(细节处理)触屏事件中的Bug解决方案以及禁止横屏和竖屏切换!.pdf
Android应用源码开发Demo,主要用于毕业设计学习。
android经典开发案例60个(源码类)例:Activity生命周期、横竖屏切换处理等
Android横竖屏要解决的问题应该就两个:一。布局问题;... “landscape” 横屏显示(宽比高要长) “portrait” 竖屏显示(高比宽要长) “user” 用户当前首选的方向 “behind” 和该Activity下面的那个Act
本文实例讲述了Android编程判断横屏、竖屏及设置横竖屏的方法。分享给大家供大家参考,具体如下: 还是这个手机项目,有一个需求是整个工程中只有刚进去的界面允许横屏显示,并且要将该界面的标题隐藏,当切换回竖屏...
android应用开发,包括横竖屏的切换以及屏幕自适应
Android 横竖屏切换 利用Android系统每次屏幕切换会重启Activity的特性,在OnCreat处自动加载不同显示状态下的layout。
surfaceview 支持横竖屏切换 视屏适配屏幕,能够支持MP4的播放
本文为大家分享了Android横竖屏切换及其对应布局加载问题,供大家参考,具体内容如下 第一,横竖屏切换连带横竖屏布局问题: 如果要让软件在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同的布局。...
横竖屏加载 强制加载横竖屏 可以在code4app官网查询
本篇文章主要介绍了Android开发强制横屏和强制竖屏设置实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
在做android 开发时,在默认情况下当屏幕从竖评变到横屏时会触发 onConfigurationChanged 事件 在默认情况下会重新加载画面并显示和横评一样的画面,这样会有2个问题,布局问题,在竖屏 显示的布局到横屏中由于宽和...
本文实例讲述了Android开发使用Activity嵌套多个Fragment实现横竖屏切换功能的方法。分享给大家供大家参考,具体如下: 一、上图 二、需求 近期项目遇到个横竖屏切换的问题,较为复杂,在此记之。 1、Activity中竖...
android4.0 禁止横竖屏切换使用 android:configChanges=”orientation|keyboardHidden”无效 在之前的版本中都是在Manifest文件中设置Activity的 android:configChanges=”orientation|keyboardHidden”,但是在...
Android横竖屏切换在手机开发中比较常见,很多软件在开发过程中为了避免横竖屏切换时引发不必要的麻烦,通常禁止掉横竖屏的切换,即通过在AndroidManifest.xml中设置activity中的android:screenOrientation属性值来...
2.3.4 横屏与竖屏切换 14 第3章 第一个Android程序 15 3.1 HelloAndroid 15 3.1.1 在Eclipse中创建项目 15 3.1.2 编写程序项目代码 17 3.1.3 运行HelloAndroid 18 3.1.4 Android工程目录 19 3.1.5 ...
在开发中常要处理横竖屏切换,怎么处理先看生命周期 申明 Activity 横竖屏切换时需要回调两个函数 ,所以在此将这个两个函数暂时看成是Activity 横竖屏切换的生命周期的一部分,这两个函数如下 onSaveInstanceState...
快应用开发
在开发android的应用中,有时候需要限制横竖屏切换。只需要在AndroidManifest.xml文件中加入android:screenOrientation属性限制。ndroid:screenOrientation=”landscape”是限制此页面横屏显示, ndroid:...