我可以在“首选项”屏幕上禁用动画吗?

时间:2019-04-09 14:36:29

标签: android android-preferences

我正在使用Android PreferenceScreen。仅向管理员显示一个屏幕。

因此,在片段onResume中,我有一个电话:

adminScreen.setVisible(user.isAdmin());//Preference

但是,当显示片段时,将首先显示首选项,然后出现一则简短的提示,其中该行垂直消失,并且其下的行向上移动。

我希望该行立即消失,但看不到如何实现。我看不到任何方法,并且 android:animateLayoutChanges 在我的preferences.xml中的任何地方都无效。

有人知道是否有办法禁用此动画吗?

2 个答案:

答案 0 :(得分:2)

在用于显示首选项的RecycleView上禁用动画:

  @Override
  public RecyclerView onCreateRecyclerView (LayoutInflater inflater, ViewGroup parent, Bundle state) {
    final RecyclerView view = super.onCreateRecyclerView(inflater, parent, state);
    view.setItemAnimator(null);
    view.setLayoutAnimation(null);
    return view;
  }

但是,要删除的首选项仍然会短暂闪烁,因此最好的解决方案是首先使用app:isPreferenceVisible="false"将其隐藏在XML中,然后在需要时使用setVisible(true)

显示它们。

答案 1 :(得分:0)

假设您使用的是PreferenceFragmentCompat,则可以避免在onResume之前调用初始动画adminScreen.setVisible()。如果仅在setPreferencesFromResource()或setPreferenceScreen()之后执行此操作,则动画将不会完成。