android - 如何清除添加/删除操作栏的动画?
问题描述
在我的应用程序中,我使用容器来更改几个片段。在某些片段中,我必须在父活动中隐藏操作栏。我设法做到了,但是隐藏和查看工具栏的过程受到奇怪和不舒服的动画的支持。我通过以下方式隐藏和显示工具栏:
Objects.requireNonNull(getSupportActionBar()).hide();
也许我可以清除动画?
解决方案
我设法用这种方法找到了解决我的问题的方法:
public static void disableShowHideAnimation(ActionBar actionBar) {
try
{
actionBar.getClass().getDeclaredMethod("setShowHideAnimationEnabled", boolean.class).invoke(actionBar, false);
}
catch (Exception exception)
{
try {
Field mActionBarField = actionBar.getClass().getSuperclass().getDeclaredField("mActionBar");
mActionBarField.setAccessible(true);
Object icsActionBar = mActionBarField.get(actionBar);
Field mShowHideAnimationEnabledField = icsActionBar.getClass().getDeclaredField("mShowHideAnimationEnabled");
mShowHideAnimationEnabledField.setAccessible(true);
mShowHideAnimationEnabledField.set(icsActionBar,false);
Field mCurrentShowAnimField = icsActionBar.getClass().getDeclaredField("mCurrentShowAnim");
mCurrentShowAnimField.setAccessible(true);
mCurrentShowAnimField.set(icsActionBar,null);
}catch (Exception e){
//....
}
}
}
链接。
推荐阅读
- php - 在 PHP Laravel 中比较两个数组
- python - 加速度计数据的分类
- python - 是否可以以相同的形式检索和发布数据?python烧瓶和MySQL
- python - 无法在 python 3.7 中打印句子
- java - 如何在springboot中使用byte-buddy
- c - 将 32 位数字转换为四个 8 位数字
- java - 当 Android 手机通过 USB 连接时,以编程方式将文本文件从手机导出到 PC
- javascript - 为什么刷新浏览器前后console.log的结果会不一样?
- javascript - 转换为标准for循环的for循环?
- laravel - 调用未定义的方法 Illuminate\Database\Eloquent\Builder::sortByDesc()