博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Activity在屏幕显示的方向切换
阅读量:6171 次
发布时间:2019-06-21

本文共 3201 字,大约阅读时间需要 10 分钟。

 

Activity在屏幕显示的方向切换

 

  android:screenOrientationandroid:configChanges

 

  Activity的内容在屏幕上的显示方向,有时会旋转。

  activity内容方向的设定与转换,以及相关的生命周期处理,是与Manifest中activity标签下的下面两个属性相关的:

  即android:screenOrientationandroid:configChanges

  (链接中有所有属性的说明:

 

Android的屏幕方向状态是下列的值之一:

 

ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIEDActivityInfo.SCREEN_ORIENTATION_LANDSCAPEActivityInfo.SCREEN_ORIENTATION_PORTRAITActivityInfo.SCREEN_ORIENTATION_USERActivityInfo.SCREEN_ORIENTATION_BEHINDActivityInfo.SCREEN_ORIENTATION_SENSORActivityInfo.SCREEN_ORIENTATION_NOSENSORActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPEActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAITActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPEActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAITActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR

 

 

方向属性设置

  我们可以利用android:screenOrientation属性强制锁定屏幕的方向。

  也可以把方向设定为随着传感器而变化。

  下面是这个属性可以设定的值。

 

                        

  在程序中也可以调用setRequestedOrientation方法进行屏幕方向的动态设置,具体请参见文后参考资料的第二个链接。

 

方向转换与生命周期

  当在manifest中把android:screenOrientation的属性设为sensor时:

 

 

  运行程序可以发现Activity的显示内容的确会随着手机的姿态进行横竖屏的切换。

  但是观察生命周期的相关函数调用Log,发现在进行横竖屏切换的时候整个activity会调用onPause()、onStop()、onDestroy()然后重新调用onCreate()、onResume()。

  并且此时覆写onConfigurationChanged()是不会被调用的。 

 

  查看android:configChanges部分的文档可以发现,默认情况下activity是会关闭并且重启的,但是通过这个属性可以阻止activity的重启行为,让activity保持运行,并且activity的将会被调用。

  (默认情况下这个方法是不会被调用的)。

  但是官方不建议用这个属性来处理,建议看看  。

  这个属性设置的各种值就是要阻止activity重启的各种情况。

  比如设置为:

 

  这样在屏幕旋转并切换横竖屏的时候,发现activity并没有被重建,而是调用了方法。

 

补充一下:

  当android:targetSdkVersion大于等于13时, 要想onConfigurationChanged()方法被调用,mainfest中需要这样写:

......

 

测试程序

  附上测试程序代码:

package com.example.helloactivityorientation;import android.app.Activity;import android.content.res.Configuration;import android.os.Bundle;import android.util.Log;import android.widget.TextView;public class HelloOrientationActivity extends Activity{    private static final String LOG_TAG = "Hello Orientation";    @Override    public void onCreate(Bundle savedInstanceState)    {        Log.i(LOG_TAG, "onCreate");        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_hello_orientation);    }    @Override    protected void onResume()    {        Log.i(LOG_TAG, "onResume");        super.onResume();    }    @Override    protected void onPause()    {        Log.i(LOG_TAG, "onPause");        super.onPause();    }    @Override    protected void onStop()    {        Log.i(LOG_TAG, "onStop");        super.onStop();    }    @Override    protected void onDestroy()    {        Log.i(LOG_TAG, "onDestroy");        super.onDestroy();    }    @Override    public void onConfigurationChanged(Configuration newConfig)    {        Log.i(LOG_TAG, "onConfigurationChanged");        super.onConfigurationChanged(newConfig);    }}
Activity代码

 

Manifest代码

  布局代码略,能看出正反向就行,TextView里写个HelloWorld就可以了。

 

 

参考资料

  官方文档中activity标签下的元素说明:

  

  一个英文的关于屏幕方向的文章:

  

 

转载地址:http://eovba.baihongyu.com/

你可能感兴趣的文章
Flutter滚动, 中间显示整图, 前后露出部分图
查看>>
Flutter入坑指南:开发环境搭建
查看>>
跨Navigation跳转(类似微信)方案二
查看>>
JavaScript 复习之 对象的继承
查看>>
从开源小白到 Apache Member,我的成长之路
查看>>
logstash简介
查看>>
Java多线程之synchronized理论
查看>>
Android NestedScrolling解决滑动冲突问题(2) - fling问题与NestedScroll++
查看>>
Tomcat和JVM的性能调优总结
查看>>
硬件线程和软件线程的区别
查看>>
时间戳前
查看>>
11月22日晚上海交大《PMI敏捷实践指南解读》线上沙龙欢迎你的参与!
查看>>
初识 Linux (VMware、CentOS 7)
查看>>
使用SpringMVC完成文件上传
查看>>
mysql Load Data InFile 的用法
查看>>
Go new vs make
查看>>
【云宏大讲坛】超融合,融合的不仅是基础架构
查看>>
pytnon入门的一些小实例
查看>>
ubuntu下的dock工具
查看>>
饿了么被上海市市场监督局予以警告处分
查看>>