Android实现横竖屏切换的实例代码

 更新时间:2017年06月26日 09:24:29   作者:全速前行  
本篇文章主要介绍了Android实现横竖屏切换的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

这几年一直在做手机上和电视盒的App,几乎没有考虑过横竖屏切换的问题。电视盒好说,横屏不变,你要是给它设计个竖屏人家也没机会使;而手机上的应用就不好说了,有些界面你设计了横竖屏兼容可能是为了表示你的功能强大。但是按照惯例,或许也是设计师图省事,我们只是做一个方案。就像目前主流的App都只有竖屏一个模式,比如微信、京东和招商银行。我截了几张图表示一下。 

 

zs 

但是像地图之类的应用,也许横屏会显示的更友好一些。请看腾讯地图的设计如下:

dt1 

dt2 

细心的你会发现,地图的横竖屏的样式几乎是一样的布局,调整起来还是比较容易的。我一直也这样认为,横竖屏切换就是一件十分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。详情请见这里:
https://github.com/alexjlockwood/worker-fragments

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 详解Android WebView的input上传照片的兼容问题

    详解Android WebView的input上传照片的兼容问题

    本篇文章主要介绍了详解Android WebView的input上传照片的兼容问题,非常具有实用价值,需要的朋友可以参考下
    2017-08-08
  • 详解Android中Room组件的使用

    详解Android中Room组件的使用

    Room 是在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库,这篇文章主要为大家介绍了Room组件的具体使用,需要的可以参考下
    2023-08-08
  • kotlin使用建造者模式自定义对话框

    kotlin使用建造者模式自定义对话框

    这篇文章主要为大家详细介绍了kotlin使用建造者模式自定义对话框的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • 如何使用Android注解处理器

    如何使用Android注解处理器

    这篇文章主要介绍了如何使用Android注解处理器,对注解处理器感兴趣的同学,可以参考下
    2021-04-04
  • Android ArrayMap源代码分析

    Android ArrayMap源代码分析

    这篇文章主要介绍了Android ArrayMap源代码分析的相关资料,需要的朋友可以参考下
    2016-10-10
  • Android滑动到顶部和底部时出现的阴影如何去掉

    Android滑动到顶部和底部时出现的阴影如何去掉

    本文给大家介绍android滑动到顶部和底部时出现的阴影去掉的解决方法,本文还涉及到listview各个属性的用法介绍,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-10-10
  • Android实现静态广播监听器的方法

    Android实现静态广播监听器的方法

    这篇文章主要介绍了Android实现静态广播监听器的方法,涉及Android的广播机制与记录监听广播信息的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Android开启ADB网络调试方法

    Android开启ADB网络调试方法

    今天小编就为大家分享一篇Android开启ADB网络调试方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • 为Android添加一门新语言的解决办法

    为Android添加一门新语言的解决办法

    本篇文章是对为Android添加一门新语言的解决方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Android自定义View播放Gif动画的示例

    Android自定义View播放Gif动画的示例

    本篇文章主要介绍了Android自定义View播放Gif动画的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10

最新评论