android 横竖屏切换 源码剖析

以通知栏中下拉菜单里面的"自动旋转"按钮为例子,说下横竖屏切换的原理;

点击状态栏中的"自动旋转"按钮,会走下面代码:

frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java

protected void handleClick() {
    //"自动旋转"的点击事件
    if (mController == null) return;
    final boolean newState = !mState.value;
    //设置横竖屏,newState表示是否保存当前旋转方向
    mController.setRotationLocked(!newState);
    //刷新界面
    refreshState(newState);
}

 我们主要看的是,横竖屏是如何设置的,mController的实现类是RotationLockControllerImpl:

public void setRotationLocked(boolean locked) {
    RotationPolicy.setRotationLock(mContext, locked);
}

进入到了RotationPolicy里面,继续看:

public static void setRotationLock(Context context, final boolean enabled) {
    Settings.System.putIntForUser(context.getContentResolver(),
            Settings.System.HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, 0,
            UserHandle.USER_CURRENT);

    //屏幕旋转度数
    final int rotation = areAllRotationsAllowed(context) ? CURRENT_ROTATION : NATURAL_ROTATION;
    //设置旋转
    setRotationLock(enabled, rotation);
}

private static void setRotationLock(final boolean enabled, final int rotation) {
    AsyncTask.execute(new Runnable() {
        @Override
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

renshuguo123723

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值