如何清除adding/removing actionbar 的动画?
How to clear animation of adding/removing actionbar?
在我的应用程序中,我使用容器来更改几个片段。在某些片段中,我必须在父 activity 处隐藏操作栏。我设法做到了,但是隐藏和查看工具栏的过程是由奇怪和不舒服的动画支持的。我通过以下方式隐藏和显示工具栏:
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){
//....
}
}
}
link.
在我的应用程序中,我使用容器来更改几个片段。在某些片段中,我必须在父 activity 处隐藏操作栏。我设法做到了,但是隐藏和查看工具栏的过程是由奇怪和不舒服的动画支持的。我通过以下方式隐藏和显示工具栏:
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){
//....
}
}
}
link.