Android实现横竖屏切换的实例代码
这几年一直在做手机上和电视盒的app,几乎没有考虑过横竖屏切换的问题。电视盒好说,横屏不变,你要是给它设计个竖屏人家也没机会使;而手机上的应用就不好说了,有些界面你设计了横竖屏兼容可能是为了表示你的功能强大。但是按照惯例,或许也是设计师图省事,我们只是做一个方案。就像目前主流的app都只有竖屏一个模式,比如微信、京东和招商银行。我截了几张图表示一下。
但是像地图之类的应用,也许横屏会显示的更友好一些。请看腾讯地图的设计如下:
细心的你会发现,地图的横竖屏的样式几乎是一样的布局,调整起来还是比较容易的。我一直也这样认为,横竖屏切换就是一件十分easy的事儿,但现在我不这样认为了。
因为我可是思考在android平板上的界面设计了。屏幕大了,横竖屏可以提供不同的表现形式。这是平板与手机的区别。但这样一来,事情就会变得不那么简单了。尤其是大量信息录入的界面,后台有线程工作的时候,都是很难办的事儿。下面是我的一些探索,希望大家多提意见。
生命周期的故事
横竖屏切换的过程,会经历ondestroy和oncreate。通俗点说,就是这个activity关闭了,有新起来一个activity。那么,前一个activity的数据肯定都不存在了。虽然这样的切换,你的edittext上输入的内容还在,但是一定要记得,成员变量都是空的啦。数据保存成了一个问题。
保存整个activity的方案
在manifest里对于的activity加上这个配置就不会重走销毁和创建了,如下:
android:configchanges="orientation|keyboardhidden|screensize"
不要高兴的太早,除非你不需要改变横竖屏的布局,否则这个方案仍然要有很多工作要做。
还是乖乖的保存数据吧
onretainnonconfigurationinstance()被弃用了,我们还是用onsaveinstancestate吧。针对横竖屏不同的布局,我们只需在创建一个layout-land文件夹,里面放同名的布局文件,oncreate时会自动加载相对应的横竖屏布局。
在横竖屏切换的过程中会经历onsaveinstancestate,给你一个保存数据的机会:
@override public void onsaveinstancestate(bundle outstate) { log.i("linc", "onsaveinstancestate(bundle)"); super.onsaveinstancestate(outstate); outstate.putstring(text_one, ""+edittext1.gettag(r.id.tag_first));//avoid null point // outstate.putserializable();//object }
在oncreate中把数据取出来:
@override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_land_port_switch); log.e("linc","oncreate"); edittext1 = (edittext)findviewbyid(r.id.txt1); // restore saved state. if (savedinstancestate != null) { edittext1.settag(r.id.tag_first,savedinstancestate.getstring(text_one)); } }
github上的一个进度条例子
请看这个例子吧,横竖屏切换可以有自己的布局,切换过程中不会打断进度条的工作,用到了fragment。详情请见这里:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 在电脑上使用酷我K歌录歌,发现自唱声音太小怎么办?
下一篇: 唯品会特卖升级,消费升维即将大爆发