当前位置:   article > 正文

Android 横竖屏切换加载不同的布局_安卓横竖屏切换加载不同布局

安卓横竖屏切换加载不同布局

 参考 https://blog.csdn.net/zhoup324/article/details/53182065

1.禁止APP内横竖屏切换

在 配 置 Activity 的 地 方 进 行 如 下 的 配 置

  • android:screenOrientation="portrait"(landscape 是横向,portrait 是纵向)。这样就可以保证是竖屏总是竖屏
  • android:screenOrientation="landscape"(landscape 是横向,portrait 是纵向)。这样就可以保证是横屏总是横屏

上述修改也可以在Java代码中通过类似如下代码来设置

  • setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

2.重启Activity的横竖屏切换的处理

缺省状态下,Activity每次横竖屏切换(包括用setRequestedOrientation调用)都会重新调用一轮onPause-> onStop-> onDestory-> onCreate->onStart->onResume操作,从而销毁原来的Activity对象,创建新的Activity对象,这是因为通常情况下软件在横竖屏之间切换,界面的高宽会发生转换,从而可能会要求不同的布局。

  1. 在res目录下建立layout-land和layout-port目录,相应的layout文件名不变,比如main.xml。layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,横竖屏切换时程序自己会调用Activity的onCreate方法,从而根据当前横竖屏情况自动加载响应的布局。
  2. 假如布局资源是不一样又不按照如上设置,则需要通过java代码来判断当前是横屏还是竖屏然后来加载相应的xml布局文件(比如mainP为竖屏mainL为横屏)。因为当屏幕变为横屏的时候,系统会重新呼叫当前Activity的onCreate方法,你可以把以下方法放在你的onCreate中来检查当前的方向,然后可以让你的setContentView来载入不同的layout xml。

上面这两种方式实现对于横竖屏的切换加载不同的布局文件,都会让activity重新加载一次,那么必然就会导致数据的丢失或者是数据的重新获取,造成了过多的额外的功耗,那么我们可以在翻转之前保存一下现在已经获取到的数据,那么在翻转之后就可以直接使用,而不需要重新获取或者重新加载,具体在下面看

  • 重写Activity.onRetainNonConfigurationInstance(),用户横竖屏切换前保存数据
  • 在onCreate()函数中调用getLastNonConfigurationInstance(),获取onRetainNonConfigurationInstance()保存的数据
  1. 重写Activity.onRetainNonConfigurationInstance(),用户横竖屏切换前保存数据
  2. @Override
  3. public Object onRetainNonConfigurationInstance() {
  4. final MyDataObject data = collectMyLoadedData();
  5. return data;
  6. }
  7. 在onCreate()函数中调用getLastNonConfigurationInstance(),获取onRetainNonConfigurationInstance()保存的数据
  8. @Override
  9. public void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.main);
  12. final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();
  13. if (data == null) {
  14. data = loadMyData();
  15. }
  16. ...
  17. }

3.非重启Activity的横竖屏切换的处理

虽然重启Activity为我们提供了保存数据和读取数据的方式,但是如此一来程序会显得有些繁琐,所以有时候程序员往往就不想让Activity重启,Android也为我们提供了解决方案,就是通过onConfigurationChanged拦截横竖屏变换,从而进行必要的重新布局和切换操作。

操作步骤如下:

  • 首先,manifest中为相应的Activity设置android:configChanges属性,从而让Activity不延续上述的重建流程
  1. Andorid 3.2以前的SDK可以使用如下配置
  2. android:configChanges="orientation|keyboardHidden"
  3. 而Adnroid 3.2以后的SDK必须添加一个screenSize属性,具体如下
  4. android:configChanges="keyboardHidden|orientation|screenSize"
  5. 或者
  6. android:configChanges="orientation|screenSize"
  • 然后重写activity中onConfigurationChanged 方法
  1. @Override
  2. public void onConfigurationChanged(Configuration newConfig){
  3. super.onConfigurationChanged(newConfig);
  4. if(this.getResources().getConfiguration().orientation==Configuration.ORIENTATION_
  5. LANDSCAPE){
  6. //TODO
  7. }else
  8. if(this.getResources().getConfiguration().orientation==Configuration.ORIENTATION_
  9. PORTRAIT){
  10. //TODO
  11. }
  12. }

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号