如何让手机横竖屏切换不重走Activity生命周期

本文介绍了如何在Android中防止横竖屏切换时Activity生命周期重走的方法,通过在Manifest中设置`android:configChanges="keyboardHidden|orientation|screenSize"`,并自定义处理屏幕变化的逻辑。此外,还提到了`android:screenOrientation`属性用于强制Activity保持横屏或竖屏。同时,讨论了Configuration类和Activity中处理配置变化的相关知识。
摘要由CSDN通过智能技术生成

在Manifest里加上android:configChanges="keyboardHidden|orientation|screenSize";

 

扩展补充:

一:

Activity中还有一属性和屏幕方向有关:

<activity 
   . . .
      android:screenOrientation=["unspecified" | "user" | "behind" |
                                 "landscape" | "portrait" |
                                 "sensor" | "nosensor"]
    . . .
&lt;/activity>

比如,在Mainifest.xml的Activity元素中增加这么一个属性:

android:screenOrientation="portrait"

则无论手机如何变动,拥有这个属性的activity都将是竖屏显示。

android:screenOrientation="landscape“为横屏显示。

这里提一个小知识,Anroid模拟器中,快捷键"ctrl+F11"可以实现转屏。

 

二:

configuration

参考:http://blog.csdn.net/ljz2009y/article/details/8515548


一、设置android的硬件环境监听:

  1. <activity  
  2.             android:configChanges="orientation"  
  3.             android:name=".MainActivity"  
  4.             android:label="@string/title_activity_main" >  
  5.             <intent-filter>  
  6.                 <action android:name="android.intent.action.MAIN" />  
  7.                 <category android:name="android.intent.category.LAUNCHER" />  
  8.             </intent-filter>  
  9.         </activity>  


在需要监控的activity中的标签写下的方法用户监听标签

android:configChanges="orientation"

在activity中实现一下方法:

@Override
	public void onConfigurationChanged(Configuration newConfig)
	{
		super.onConfigurationChanged(newConfig);
		// 用户配置修改的时候
		if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
		{
			//在横屏的情况下,跳转
			textView.setText("ORIENTATION_LANDSCAPE " + System.currentTimeMillis());
		}
		else if( newConfig.orientation == Configuration.ORIENTATION_PORTRAIT )
		{
			//在竖直情况下,跳转
			textView.setText("ORIENTATION_PORTRAIT" + System.currentTimeMillis());
		}
		else if( newConfig.orientation == Configuration.ORIENTATION_SQUARE )
		{
			textView.setText("ORIENTATION_SQUARE " + System.currentTimeMillis());
		}
		else if( newConfig.orientation == Configuration.ORIENTATION_UNDEFINED )
		{
			textView.setText("ORIENTATION_UNDEFINED " + System.currentTimeMillis());
		}
	}


 

同这用就可以当屏幕的有横屏竖屏之间的转化,就有相关的事件触发。

(键盘显示或者隐藏、用户的语言设置、用户字体修改、对键盘类型修改、键盘导航修改)这些都可以触发相关的activity的事件产生。


二、对android固定设置格式


以下是网上良好的应用程序配置的说明:

Android通过终止、重启应用程序来重新加载资源文件,以做到对语言、区域和硬件实时变化的支持。它的默认的行为不是总是方便和令人满意的,尤其当配置变化(如屏幕方向和键盘可视)、用户旋转设备或划出键盘等。你可以通过监测和响应定制你的应用程序来对这些变化作出响应。

为了能让Activity能监听实时的配置变化,需要在manifest节点里添加“android:configChanges”特性,指定你要处理的配置变化事件。接下来的列表给出了你可以指定的配置变化的事件值:

❑ orientation 屏幕在纵向和横向间旋转。

❑ keyboardHidden 键盘显示或隐藏。

❑ fontScale 用户变更了首选的字体大小。

❑ locale 用户选择了不同的语言设定。

❑ keyboard 键盘类型变更,例如手机从12键盘切换到全键盘

❑ touchscreen或navigation 键盘或导航方式变化,一般不会发生这样的事件

// --------

Configuration 类中包含了很多种信息,例如系统字体大小,orientation,输入设备类型等等.

fontScale -- 来源于system.prop中 sys.font.scale配置项

输入设备类型配置:系统加入的任何输入device必须拥有输入属性:现在android中仅支持touchscreen(触摸),keyboard(键盘),navigation(滚动球)

orientation -- 屏幕方位

keyboardHidden -- 如果是划盖或开盖手机并且没有软键盘支持,这个设成true

hardKeyboardHidden -- 如果是划盖或开盖手机,这个设成true

locale -- 用户选择的location信息

theme -- 皮肤,资源等等

 

当Configuration改变后,ActivityManagerService将会发送"配置改变"的广播,会要求ActivityThread 重新启动当前focus的Activity.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值