Android Java如何通过代码修改设备动画设置(含移除动画)
Android 10 下通过Java编程切换「Remove Animations(移除动画)」设置实现方案
你提到的无障碍菜单下的移除动画开关,是Android 10(API 29)新增的系统全局设置项,可通过Settings.Global提供的接口直接读写,具体实现逻辑如下:
前置权限要求
修改该设置需要持有android.permission.WRITE_SECURE_SETTINGS权限,该权限属于系统管控的特权权限:
- 预装到系统分区的特权应用可直接在Manifest中声明使用
- 普通调试应用可通过adb命令临时授权,命令如下:
adb shell pm grant 你的应用包名 android.permission.WRITE_SECURE_SETTINGS - 面向普通用户分发的第三方上架应用无法获取该权限,不要在生产环境依赖这个能力。
核心实现代码
1. 检查当前开关状态
boolean isRemoveAnimationsOn = false; // 该设置仅Android 10及以上版本存在,必须加版本判断 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { isRemoveAnimationsOn = Settings.Global.getInt( getContentResolver(), Settings.Global.DISABLE_ANIMATIONS, 0 // 系统默认状态为关闭,对应值0 ) == 1; }
2. 切换开关状态
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // 要切换到的目标状态:1代表开启移除动画,0代表关闭 int targetValue = isRemoveAnimationsOn ? 0 : 1; Settings.Global.putInt( getContentResolver(), Settings.Global.DISABLE_ANIMATIONS, targetValue ); }
注意事项
- 开启该开关后,系统会自动将窗口动画缩放、过渡动画缩放、动画程序时长缩放三个开发者选项里的动画参数强制置为0,不需要你手动修改这三个参数;关闭开关后系统会自动恢复用户之前设置的动画缩放比例。
- 没有对应权限时调用写入接口会直接抛出
SecurityException,建议在调用前增加权限校验逻辑,避免崩溃。 - 低于Android 10的系统没有这个全局开关,要实现移除动画效果只能手动修改三个动画缩放的全局设置值。
功能对应位置参考:
内容的提问来源于stack exchange,提问作者Sambhav Khandelwal
相关产品推荐
相关产品推荐

