为什么SwitchPreference在从开启切换到关闭时不显示动画反之亦然?

时间:2015-11-24 07:44:19

标签: android xml android-animation android-preferences

我为我的应用SwitchPreference制作了preferences

问题是,当我在&和/或相反,它正突然转动。

这是SwitchPreference文件的代码:

preferences.xml

我是初学者,所以请合作&让我知道这里有什么问题。

提前致谢。

3 个答案:

答案 0 :(得分:3)

导致

我注意到一些不同的东西可能导致我的SwitchPreference个对象缺少动画:

  1. 如果SwitchPreference是设置活动中的第一个Preference

  2. 如果我延长SwitchPreference并改为使用post describing a similar problem)。

  3. 修复

    为了避免第一个问题,我创建了一个DummyPreference类,我将其用作Preference中的第一个PreferenceScreen。以下示例。

    <强> DummyPreference.java

    public class DummyPreference extends Preference
    {
        public DummyPreference(Context context,AttributeSet attrs)
        {
            super(context,attrs);
        }
    
        @Override
        public View getView(View convertView,ViewGroup parent)
        {
            View v = new View(getContext());
            v.setVisibility(View.GONE);
            return v;
        }
    }
    

    <强> pref_whatever.xml

    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
        <com.exaple.DummyPreference/>
        <!-- other preference controls here -->
    </PreferenceScreen>
    

    为了避免第二个问题,我不得不求助于在XML中使用android的普通旧Preference类,并且我将所需的任何额外逻辑移到Activity或{{ 1}}包含Fragment个对象。

    我知道这是一个老帖子。我希望将来可以帮助别人。

答案 1 :(得分:0)

我遇到了与Checkboxes类似的问题,我想这可能是同样的问题。问题行似乎在父类TwoStatePreference的setChecked()函数下。 notifyChanged()行实际上是告诉重绘自己的偏好,这意味着它会突然显示为已选中。您可以扩展SwitchPreference并只是覆盖该功能并对该行进行注释,它应该可以正常工作,只要您在该首选项中没有任何其他内容重绘自己。

@Override
public void setChecked(boolean checked) {
    // Always persist/notify the first time; don't assume the field's default of false.
    final boolean changed = mChecked != checked;
    if (changed || !mCheckedSet) {
        mChecked = checked;
        mCheckedSet = true;
        persistBoolean(checked);
        if (changed) {
            notifyDependencyChange(shouldDisableDependents());
            //notifyChanged();  *******THIS IS REDRAWING THE VIEW IMMEDIATELY
        }
    }
}

答案 2 :(得分:0)

我也遇到了这个问题,我尝试过在stackoverflow中注意到的每个解决方案,但仍然无法解决问题。当你尝试扩展Preference的子类时,它似乎是一个安卓漏洞,动画会消失。请参阅此处了解bugtracker条目。

最后我找到了解决方案,我创建了一个扩展Preference的类,并设置了包含switch组件的布局,并处理了自定义类中的click事件,切换动画的工作正常。

xml文件大多如:

<com.test.MyPreference>
<!--can define custom_switch_layout.xml base on preference_material.xml-->
android:layout="@layout/custom_switch_layout"
android:key="new_switch"
android:title="pref_switch_title"</com.test.MyPreference>