注意:onConfigurationChanged事件并不是只有屏幕方向改变才可以触发,其他的一些系统设置改变也可以触发,比如打开或者隐藏键盘。
当我们的屏幕方向发生改变时,就可以触发onConfigurationChanged事件。我们要想当前的activity捕获这个事件,需要做以下这么几件事情。
第一:权限声明:
<uses-permission Android:name="android.permission.CHANGE_CONFIGURATION"></uses-permission>
API中说该权限允许我们改变配置信息,但是我们再改变屏幕方向的程序中却并没有用到该权限,是不是相互冲突了呢?这里我们可以这样认为,当我们声明该权限的的时候,系统允许我们通过重写activity中的onConfigurationChanged方法来捕获和修改某些配置信息。
第二:声明activity要捕获的事件类型,
如
[html] view plaincopyprint?
<activity android:name=".MainActivity" android:label="@string/app_name"
android:configChanges="orientation|keyboard|keyboardHidden|screenSize">
<!-- 注意,这里configchange的属性少了也许onconfig方法就会调用不到,尤其是少了screenSize -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
这里一定要声明Android:configChanges属性,该属性规定了我们可以在程序中捕获到的事件类型,多个事件类型用|分隔。
如果这里没有orientation,那么我们再程序中是无法捕获到屏幕改变的事件的。
第三:
重写Activity中的onConfigurationChanged方法
[java] view plaincopyprint?
package com.demo.android;
import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
/**
* 屏幕旋转时调用此方法
*/
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//newConfig.orientation获得当前屏幕状态是横向或者竖向
//Configuration.ORIENTATION_PORTRAIT 表示竖向
//Configuration.ORIENTATION_LANDSCAPE 表示横屏
if(newConfig.orientation==Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(MainActivity.this, "现在是竖屏", Toast.LENGTH_SHORT).show();
}
if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){
Toast.makeText(MainActivity.this, "现在是横屏", Toast.LENGTH_SHORT).show();
}
}
}
相关推荐
在Android开发中,屏幕旋转是一个常见的需求,尤其在设计适应不同设备方向的应用时。本教程将深入探讨如何在Android中实现屏幕旋转,并通过一个名为"ScreenRotationDemo"的实例项目来展示具体步骤。 首先,我们需要...
总的来说,监听Android屏幕的横竖翻转主要是通过在`AndroidManifest.xml`中配置Activity,然后在Activity中重写`onConfigurationChanged()`方法,利用`Configuration`对象的`orientation`属性来判断屏幕的方向。...
在Android应用开发中,了解Activity的生命周期至关重要,尤其是在屏幕旋转这样的设备状态变化时。当用户在使用设备时,比如从竖屏切换到横屏,或者反之,系统会自动调用Activity的相关方法,来管理和恢复应用的状态...
当 `onConfigurationChanged()` 被调用时,可以看到 `str` 的值在屏幕旋转时得到保留,这表明配置改变并未导致 `Activity` 的重新创建。若不指定 `android:configChanges`,每次屏幕旋转都会导致 `Activity` 重新...
屏幕旋转会导致布局高度改变,我们需要在`onConfigurationChanged()`方法中更新`rootHeight`,以确保在不同方向下都能正确判断键盘状态。 ```java @Override public void onConfigurationChanged(Configuration ...
在Android开发中,屏幕旋转适配是一个常见的需求,特别是在创建多设备兼容的应用时。当我们谈论“Android屏幕旋转适配”,主要是指如何使应用在不同屏幕方向(横屏或竖屏)下保持良好的用户体验和功能完整性。 ...
总之,Android屏幕旋转涉及多个方面,包括配置文件设置、传感器监听、动画设计、资源适配和状态管理等。开发者需要综合运用这些知识点,为用户提供流畅且一致的多方向使用体验。在实际开发中,应根据应用需求灵活...
屏幕旋转是Android应用开发中的一个常见功能,它涉及到设备方向的改变和用户界面的适配。在Android系统中,屏幕旋转可以通过系统设置手动触发,也可以由应用内的特定事件(如按钮点击)触发。本实例主要讲解如何实现...
在Android开发中,屏幕旋转是常见的用户交互行为,开发者需要考虑如何优雅地处理这一变化,以提供良好的用户体验。本文将详细介绍几种在Android中实现屏幕旋转的方法,并分析它们的优缺点。 1. **AndroidManifest....
在Android应用开发中,屏幕旋转是一个常见的需求,特别是在游戏或者多媒体应用中。本文将深入探讨如何实现Activity的180度旋转,同时提供相关的源代码参考。 首先,我们需要理解Android系统对屏幕方向的支持。...
android:text="监听屏幕旋转并调用PopupWindow的update方法,发现如果ListView可见的时候,update方法不生效,ListView不可见的时候update生效"/> android:id="@+id/anchor_button" android:layout_width="wrap...
- 当处理复杂的业务逻辑时,可能需要结合使用`onConfigurationChanged()`方法来监听屏幕配置的变化,从而避免Activity的销毁和重建。 总之,理解并正确处理Activity的生命周期以及Webview的状态管理是Android开发中...
在Android应用开发中,屏幕旋转是一个常见的功能需求,它涉及到用户界面(UI)的动态调整以适应不同方向的显示。本示例项目“Demo_TestRotate”包含两个不同的尝试,即“Demo_TestRotatesOne-master”和“Demo_...
总之,Android开发者需要了解如何适配屏幕旋转,包括使用`android:configChanges`、`onConfigurationChanged()`以及通过`ActivityInfo.SCREEN_ORIENTATION_*`常量来设定屏幕方向。"MyRotation.zip"的源代码应该能...
"安卓Android源码——(旋转关节).zip"这个压缩包可能包含了一个关于Android系统中处理屏幕旋转或者用户界面旋转的相关模块。在这个讨论中,我们将深入探讨Android系统如何处理屏幕旋转,涉及的知识点包括Android的...
需要在AndroidManifest.xml中对应的Activity标签中添加`android:configChanges="orientation|screenSize"`,然后在Activity中重写onConfigurationChanged()方法,在这里执行屏幕旋转的相关操作。 4. **自定义旋转...
在Activity中,你需要重写`onConfigurationChanged`方法,确保ExoPlayer的布局和状态在屏幕旋转后得到正确恢复: ```java @Override public void onConfigurationChanged(Configuration newConfig) { super....