android 手机屏幕旋转机制与使用说明

本文详细介绍了Android应用中屏幕旋转的监测和处理,包括Orientation状态初始化、设置及监听,以及不同场景下的屏幕旋转处理,如默认情况、固定屏幕方向、强制开启旋转和捕获旋转事件。通过分析,开发者可以更好地理解如何在App中适配屏幕旋转,避免不必要的activity销毁。
摘要由CSDN通过智能技术生成

android 屏幕旋转机制与使用说明



一 Overview

在开发android应用的时候,有可能需要让应用程序随着系统设置而进行调整,比如判断系统的屏幕方向、判断系统方向的方向导航设备等。除此之外,还需要让应用程序监听系统设置的更改,对系统设置的更改作出响应。

如果系统需要监听系统设置的更改,则可以考虑重写ActivityonConfigurationChanged()方法,该方法是一个基于回调的事件处理方法;当系统的设置发生更改时,该方法会被自动触发。查阅AndroidAPI可以得知配置信息android:ConfigChanged实际对应的是Activity里的onConfigurationChanged()方法。

在一些特殊的情况中,你可能希望当一种或者多种配置改变时避免重新启动你的activity。你可以通过在manifest中设置android:configChanges属性来实现这点。你可以在这里声明activity可以处理的任何配置改变,当这些配置改变时不会重新启动activity,而会调它的onConfigurationChanged()方法。如果改变的配置中包含了你所无法处理的配置(在android:configChanges并未声明),你的activity仍然要被重新启动,onConfigurationChanged()将不会被调用。

android:configChanges=""中可以用的值,请查询具体的androidAPI

本文主要是站在App的角度,分析屏幕旋转处理的一般使用方法和注意事项。然后简要介绍framework中的实现细节。

二 屏幕旋转状态监测


屏幕旋转处理的关键为获取屏幕旋转的信息,因此系统中就需要有一种机制,可以实时监测当前系统的屏幕角度。所以,首先,我们就关注一下Framework是如何实现实时监控系统中的oritentation状态的。

1.Orientation状态初始化与设置

setting设置

AndroidSettings->Display中有Orientation这一设置项。当选中时,屏幕会随设备旋转。

settings设置是在文件DisplaySettings.java中,该项对应的键字符串为:

private static final String KEY_ACCELEROMETER = "accelerometer";


其默认值保存在xml文件中,默认是EnableUI程序初始化时会根据其值是否在复选框中打勾(代码在onCreate函数中):


public void onCreate(Bundle savedInstanceState)
{
        Accelerometer = (CheckBoxPreference) findPreference(KEY_ACCELEROMETER);
        mAccelerometer.setPersistent(false);
}

保存setting更改
当用户改变了AndroidSettings-> Display中有Orientation这一设置项时,会保存起来:
 public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
        if (preference == mAccelerometer) {
            RotationPolicy.setRotationLockForAccessibility(
                    getActivity(), !mAccelerometer.isChecked());
        } else if (preference == mNotificationPulse) {
            boolean value = mNotificationPulse.isChecked();
            Settings.System.putInt(getContentResolver(), Settings.System.NOTIFICATION_LIGHT_PULSE,
                    value ? 1 : 0);
            return true;
	}
监听setting的变化

在文件frameworks/policies/base

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值