`
TonySun3544
  • 浏览: 161435 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android横竖屏切换

阅读更多

Android横竖屏要解决的问题应该就两个:1.布局问题;2.重新载入问题。

 

1.布局问题:

如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的 AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性,他有以下几个参数:
"unspecified"
默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向.
"landscape"
横屏显示(宽比高要长)
"portrait"
竖屏显示(高比宽要长)
"user"
用户当前首选的方向
"behind"
和该Activity下面的那个Activity的方向一致(在Activity堆栈中的)
"sensor"
有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换。
"nosensor"
忽略物理感应器,这样就不会随着用户旋转设备而更改了 ( "unspecified"设置除外 )。
也可以在Java代码中通过setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);来设置。

如果要让软件在横竖屏之间切换,由于横竖屏的高宽会发生转换,有可能会要求不同的布局。可以通过以下方法来切换布局:

1)在res目录下建立layout-land和layout-port目录,相应的layout文件不变,比如main.xml。layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,模拟器会自动寻找。

2)通过this.getResources().getConfiguration().orientation来判断当前是横屏还是竖屏然后来加载相应的xml布局文件。因为当屏幕变为横屏的时候,系统会重新呼叫当前Activity的OnCreate方法,你可以把以下方法放在你的 OnCreate中来检查当前的方向,然后可以让你的SetContentView来载入不同的Layout xml.

 

 

if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
			Log.i(TAG, "landscape");
} else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
			Log.i(TAG, "portrait");
}

 

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

 

2.重新载入问题。

 

以下解决方案主要是针对切换不同的视图时而不需重新加载activity里的数据而设计的,当切换视图是只要做相应的处理就不会在此执行onCreate方法

到网上搜了下面这篇靠谱的文章,另外想实现横竖屏不同布局的切换可以通过创建layout-land和layout-port文件夹,然后他们里面放同名的xml布局文件即可实现

首先在Mainifest.xml的Activity元素中加入android:configChanges="orientation|keyboardHidden"属性

 

<activity android:name=".MyActivity"
        android:label="@string/app_name"
        android:configChanges="orientation|keyboardHidden">
       <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter>
</activity>

 

 其次添加权限

 

<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"></uses-permission>

 

 

现在还需要在java代码的activity子类中加入配置信息改动的处理代码:

 

	/**
	 * onConfigurationChanged the package:android.content.res.Configuration.
	 * 
	 * @param newConfig
	 *            , The new device configuration.
	 *            当设备配置信息有改动(比如屏幕方向的改变,实体键盘的推开或合上等)时,
	 *            并且如果此时有activity正在运行,系统会调用这个函数。
	 *            注意:onConfigurationChanged只会监测应用程序在AnroidMainifest.xml中通过
	 *            android:configChanges="xxxx"指定的配置类型的改动;
	 *            而对于其他配置的更改,则系统会onDestroy()当前Activity,然后重启一个新的Activity实例。
	 */
	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
		// 检测屏幕的方向:纵向或横向
		if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
			// 当前为横屏, 在此处添加额外的处理代码
		} else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
			// 当前为竖屏, 在此处添加额外的处理代码
		}
		// 检测实体键盘的状态:推出或者合上
		if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
			// 实体键盘处于推出状态,在此处添加额外的处理代码
		} else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
			// 实体键盘处于合上状态,在此处添加额外的处理代码
		}
	}

 这样就OK了,屏幕方向改变时,应用程序的显示界面也会随着改动,而不是被销毁!

 

 

 

补充:

1.configChanges有如下选项:  1. orientation :屏幕在纵向和横向间旋转,  2. keyboardHidden:键盘显示或隐藏 ,3.fontScale:用户变更了首选的字体大小   4.locale : 用户选择了不同的语言设定,5.  keyboard :键盘类型变更,例如手机从12键盘切换到全键盘   6. touchscreen或navigation:键盘或导航方式变化。

2.如果缺少了keyboardHidden选项 不能防止Activity的销毁,并且在之后提到的onConfigurationChanged事件中 只能捕获竖屏变横屏的事件 不能捕获横屏变竖屏

 

 

分享到:
评论

相关推荐

    android横竖屏切换

    通过以上讲解,我们可以理解Android横竖屏切换的基本原理和实践技巧。这个Demo提供了一个实际的示例,帮助开发者更好地理解和掌握这一功能的实现。在实际项目中,根据具体需求灵活运用这些知识,可以提升应用的用户...

    Android 横竖屏切换

    Android 横竖屏切换 Android 横竖屏切换是 Android 开发中的一种常见需求,通过利用 Android 系统每次屏幕切换会重启 Activity 的特性,在 OnCreat 处自动加载不同显示状态下的 layout。下面将详细介绍 Android ...

    Android横竖屏切换处理Demo源码.rar

    这份"Android横竖屏切换处理Demo源码"提供了一个很好的学习示例,帮助开发者理解和处理这一问题。以下是对这个Demo源码中涉及的知识点的详细解析: 1. **Activity生命周期与横竖屏切换**: 当设备屏幕方向发生变化...

    android 横竖屏切换的处理

    总的来说,处理Android横竖屏切换涉及多方面的知识,包括布局适配、配置变更监听、数据保存恢复、Activity生命周期以及性能优化等。理解并熟练运用这些知识点,能帮助开发者创建出适应不同屏幕方向的高质量应用。

    Fragment的使用,隐藏显示以及androidPad横竖屏切换

    本示例“Fragment的使用,隐藏显示以及androidPad横竖屏切换”将重点讲解如何操作Fragment以及处理平板设备上的横竖屏切换。 首先,让我们深入理解Fragment的生命周期。Fragment有自己的onCreate(), onCreateView()...

    android 横竖屏切换生命周期

    android activity 执行屏幕横竖屏切换的时候activity声明周期执行的竖屏的时候点击横屏 09-04 15:54:27.675: I/yxd(6708): 应用程序执行了============onPause===方法===&gt;&gt; 09-04 15:54:27.685: I/yxd(6708): 应用...

    Android应用源码之(横竖屏切换处理-IT计算机-毕业设计.zip

    在Android应用开发中,横竖屏切换是一项基本且重要的功能,尤其对于那些需要根据屏幕方向提供不同用户体验的应用来说。这份"Android应用源码之(横竖屏切换处理)"的资源,是一个非常适合毕业设计学习的示例,可以帮助...

    Android横竖屏切换及其对应布局加载问题详解

    总结起来,处理Android横竖屏切换的关键在于理解屏幕方向变化对`Activity`生命周期的影响,以及如何通过布局文件分隔和`onConfigurationChanged()`方法来适配不同屏幕方向。正确地管理这些方面可以使应用在横竖屏间...

    android横竖屏切换总结

    在Android应用开发中,横竖屏切换是一个常见的需求,开发者需要处理好布局的变化以及由此引发的用户体验问题。本文将详细讲解如何在Android中实现横竖屏切换,并讨论如何禁止或控制这种切换。 首先,Android系统...

    android横竖屏切换不重启activity解决方案

    在AndroidManifest.xml文件中,针对需要处理横竖屏切换的Activity,添加`android:configChanges`属性,并设置其值为`orientation|keyboardHidden`。例如: ```xml android:name=".YourActivity" android:...

    Android之横竖屏切换

    "Android 横竖屏切换" Android 横竖屏切换是手机开发中一个非常常见的问题,很多软件在开发过程中为了避免横竖屏切换时引发不必要的麻烦,通常禁止掉横竖屏的切换,即通过在 AndroidManifest.xml 中设置 activity ...

    安卓Android源码——(横竖屏切换处理).rar

    在安卓(Android)系统中,横竖屏切换是应用程序开发中的常见需求,涉及到用户界面(UI)布局的动态调整和程序状态的保存与恢复。本资料"安卓Android源码——(横竖屏切换处理).rar"很可能是针对这一主题的一个实践...

    Android横竖屏切换实例总结

    总结,Android横竖屏切换涉及多个方面,包括通过XML配置文件或Java代码控制屏幕方向,利用资源定向创建不同的布局,以及通过`onConfigurationChanged`方法处理屏幕变化时的逻辑。开发者应根据实际需求选择合适的策略...

    android横竖屏切换和自适应屏幕

    在Android应用开发中,横竖屏切换和屏幕自适应是两个关键的概念,它们关系到应用程序在不同设备和屏幕尺寸上的用户体验。以下是对这两个主题的详细解释: **横竖屏切换** 1. **屏幕方向检测**:Android系统可以...

    Android视频播放器(支持横竖屏切换)

    在Android平台上开发一款支持横竖屏切换的视频播放器是一项常见的任务,这涉及到对Android多媒体框架的深入理解和屏幕适配策略。"Android视频播放器(支持横竖屏切换)"这个项目的核心目标是创建一个能够根据设备...

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

    Android 实现横竖屏切换的实例代码 Android 设备的屏幕方向可以是竖屏或横屏。竖屏是手机的常见屏幕方向,而横屏则常用于平板电脑或电视机。 Android 应用程序需要适应不同的屏幕方向,以提供更好的用户体验。在...

Global site tag (gtag.js) - Google Analytics