对于横竖屏切换的问题,大概的解决办法是:
1.只竖屏显示
android:screenOrientation="portrait"
只横屏显示
android:screenOrientation="landscape"
2.简单的防止重载
Activity每次横竖屏切换都会重新调用onPause->onStop->onDestory-> onCreate>onStart->onResume,为此涉及到内容和数据的保存和读取,否则转屏之前的内容就会消失了。很多时候为了保存之前的数据,结果让程序变得很繁琐,为此Android提供了在AndroidManifest中设置android:configChanges属性,从而让Activity不延续上述的重建流程。第一次进入Activity会调用onCreate(),横竖屏切换之后就不会去执行OnCreat函数了,而是会去调用onConfigurationChanged()这样就能控制横竖屏的切换了。用户可以在Activity或View的onConfigurationChanged(ConfigurationnewConfig)函数中获取当前横竖屏参数。
在 AndroidManifest.xml中加入:android:configChanges="orientation|keyboardHidden"
在activity中重载onConfigurationChanged事件
@Override
publicvoid onConfigurationChanged(Configuration config) {
super.onConfigurationChanged(config);
}
注意:
当我们在Android 4.0上像之前那样设置横竖屏时,会发现竟然没有效果,Activity依然走自己的生命周期,这是因为在API level 13以后Android做了修改了,SDK描述如下:
Caution: Beginning with Android 3.2 (API level 13), the "screen size" also changes when the device switches between portrait and landscape orientation. Thus, if you want to prevent runtime restarts due to orientation change when developing for API level 13 or higher (as declared by the minSdkVersion and targetSdkVersion attributes), you must include the "screenSize" value in addition to the "orientation" value. That is, you must decalare android:configChanges="orientation|screenSize". However, if your application targets API level 12 or lower, then your activity always handles this configuration change itself (this configuration change does not restart your activity, even when running on an Android 3.2 or higher device).
也就是说在Android 3.2(API level 13)以后,当设备横竖屏切换时屏幕尺寸也改变了。因此,如果你想在API Level 13或者更高的环境下,像以前那样拦截设备的横竖屏切换,你需要在orientation后加上screenSize,在AndroidManifest.xml中的Activity加入以下属性:
android:configChanges="orientation|keyboardHidden|screenSize"。
3.横竖屏分别布局
横竖屏分别布局的方法是:
在res下新建
layout-land 横屏
layout-port 竖屏
然后把layout中的xml文件分别考到以上目录,修改布局就可以了代码中不做任何更改。
在 AndroidManifest.xml文件中的主Activity中加入
android:configChanges="orientation|keyboardHidden"
然后在主Activity中的onConfigurationChanged加入
@Override
public void onConfigurationChanged(Configuration config) {
super.onConfigurationChanged(config);
if (config.orientation == Configuration.ORIENTATION_PORTRAIT){
setContentView(R.layout.main); //布局
tv = (TextView) findViewById(R.id.EditText01);//控件
}
if (config.orientation == Configuration.ORIENTATION_LANDSCAPE){
setContentView(R.layout.main); //布局
tv = (TextView) findViewById(R.id.EditText01);//控件
}
}
4.彻底禁止翻转
当然如果要彻底禁止翻转,可以设置android:screenOrientation的属性为nosensor,如此就可以忽略重力感应带来的麻烦了。不过在模拟器上不管用,在真机上是正确的。
这里提一个小知识,Android模拟器中,快捷键"Ctrl+F11/F12"可以实现转屏
5.自适应转换
如果想让它启动的时候是横屏的话就横屏表示,纵屏的话就纵屏表示,然后手机切换横竖屏就不能用了该怎么解决呢?
首先:在Mainfest.xml中追加
android:screenOrientation="sensor"android:configChanges="orientation|keyboardHidden"
这两个属性。
第二步:取得屏幕的长和宽,进行比较设置横竖屏的变量。
1. Display display = getWindowManager().getDefaultDisplay();
2. int width = display.getWidth();
3. int height = display.getHeight();
4. if (width > height) {
5. orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; //横屏
6. } else {
7. orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; //竖屏
8. }
第三步:在onConfigurationChanged()函数中追加this.setRequestedOrientation(orientation)就行了
1. public void onConfigurationChanged(Configuration newConfig) {
2. super.onConfigurationChanged(newConfig);
3. this.setRequestedOrientation(orientation);
4. }
但是这样的话你切到别的画面的时候再回到原画面,它就仍然是横的或者是纵的。怎么让它从别的屏幕回来后,又重新横竖屏布局呢?
只要在OnResume()中在设定下就行了。但是这个只支持横竖屏只有一个layout的。横竖屏分别对应layout的还不知道该怎么解决。
1. protected void onResume() {
2. orientation = ActivityInfo.SCREEN_ORIENTATION_USER;
3. this.setRequestedOrientation(orientation);
4. Display display = getWindowManager().getDefaultDisplay();
5. int width = display.getWidth();
6. int height = display.getHeight();
7. if (width > height) {
8. orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
9. } else {
10. orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
11. }
12. super.onResume();
13.}
分享到:
相关推荐
总结来说,横竖屏切换在Android应用开发中是一个涉及到用户界面方向适应性和用户体验的重要部分。开发者需要根据应用的实际需求和功能设计,通过AndroidManifest.xml中的配置或者代码中的实现来控制Activity的屏幕...
Fragment的概念在Android 3.0(API级别11)引入,为开发者提供了更大的灵活性来设计多屏幕应用,特别是在处理横竖屏切换时。本项目"fragment横竖屏切换demo"是一个实际操作的例子,展示了如何利用Fragment来实现横竖...
横竖屏切换(仿视频播放),简单Demo。 介绍:横竖屏切换 模仿 视频播放横竖屏切换 ,效果如下: 如果要横竖屏都支持的app,我觉得最好就用autolayout来布局界面。不然重置位置很麻烦。 //iOS8旋转动作的具体执行 ...
在Android开发中,横竖屏切换是一个常见的需求,尤其对于那些需要优化用户界面展示的应用来说。这个"安卓横竖屏切换源程序"提供了一个可复用的解决方案,可以帮助开发者轻松地将横竖屏切换功能集成到自己的应用中。...
在Android开发中,横竖屏切换是一个常见的需求,尤其对于那些需要根据屏幕方向提供不同界面布局的应用来说。本文将深入探讨Android系统中的横竖屏切换机制,并通过"OrientationSwitchDemo"这个示例代码来帮助理解。 ...
在安卓(Android)系统中,横竖屏切换是应用程序开发中的常见需求,涉及到用户界面(UI)布局的动态调整和程序状态的保存与恢复。本资料"安卓Android源码——(横竖屏切换处理).rar"很可能是针对这一主题的一个实践...
在“MyApplication22”这个项目中,开发者可能已经实现了一个演示如何在平板上切换Fragment以及处理横竖屏切换的示例。你可以通过查看源代码学习实际的实现方式,包括Fragment之间的交互、保存和恢复状态,以及如何...
在Android应用开发中,横竖屏切换是一项基本且重要的功能,它涉及到用户界面(UI)的适配和应用状态的保存与恢复。本资源“Android应用源码之(横竖屏切换处理).zip”提供了相关的源码示例,旨在帮助开发者理解和掌握...
在Android平台上开发一款支持横竖屏切换的视频播放器是一项常见的任务,这涉及到对Android多媒体框架的深入理解和屏幕适配策略。"Android视频播放器(支持横竖屏切换)"这个项目的核心目标是创建一个能够根据设备...
在Android应用开发中,横竖屏切换是常见的用户交互场景,它涉及到Activity的生命周期管理。Activity是Android系统中用户界面的基本单元,它承载了应用程序的主要交互逻辑。当设备从竖屏旋转到横屏,或者反之,...
横竖屏切换是移动应用开发中经常遇到的一个功能需求,特别是在游戏和多屏幕适应的应用中尤为重要。本文中提到的Cocos Creator(简称CCC),是一个非常流行的跨平台游戏开发框架。由于它使用了底层封装和组件化设计,...
在iOS应用开发中,横竖屏切换是用户体验的重要组成部分,特别是在播放器应用中。Swift作为Apple的主力编程语言,提供了强大的框架和工具来处理这种需求。这个“swift-这是一个iOS中播放器横竖屏切换的demo”展示了...
在处理横竖屏切换时,Fragment的管理变得尤为重要。本篇将深入探讨如何在Android中动态创建Fragment以及在横竖屏切换时保持状态。 首先,让我们了解Fragment的基本概念。Fragment是一个可以包含用户界面的模块化...
在Android应用开发中,横竖屏切换是一项基本且重要的功能,尤其对于那些需要根据屏幕方向提供不同用户体验的应用来说。这份"Android应用源码之(横竖屏切换处理)"的资源,是一个非常适合毕业设计学习的示例,可以帮助...
在`ObjectC_UIRotate`这个项目中,我们可以看到作者是如何实现界面横竖屏切换的。通常,源代码会包含以下关键部分: - 重写UIViewController的代理方法,如前所述,控制旋转行为。 - 使用Auto Layout定义视图的约束...
android 视频播放 点击横竖屏切换 自动旋转横竖屏切换 冲突 仿优酷(ios)效果 android没去看看到ios有这个效果 项目需要也实现了
在测试过程中,确保在不同设备和屏幕尺寸上都进行了充分的测试,以确保横竖屏切换的平滑性和兼容性。同时,注意处理可能出现的异常,如相机权限未获取、相机硬件不可用等情况。 总之,这个基于ZXing的二维码扫描...
在Android开发中,横竖屏切换是常见的应用场景,它涉及到Activity的生命周期管理和用户界面的适配。本项目“LandscapePortraitDemo”旨在演示如何在Android Studio中处理这一问题,同时结合WebView的加载以及...
在Android开发中,横竖屏切换是常见的场景,它涉及到应用程序界面布局的适应性和用户体验。这份"Android横竖屏切换处理Demo源码"提供了一个很好的学习示例,帮助开发者理解和处理这一问题。以下是对这个Demo源码中...
在横竖屏切换过程中,Fragment可以帮助我们优雅地管理UI状态,确保用户体验的连贯性。 1. **配置AndroidManifest.xml**:在AndroidManifest.xml文件中,每个Activity都有一个`screenOrientation`属性,用于设置屏幕...