2

我花了 10 多个小时试图让开关的动画工作。

我尝试了很多东西,以至于我不记得有几次尝试了,但我会解释我记得的那些。

应该工作的代码(我认为):

我使用 widgetLayout 参数:

<CheckBoxPreference
    android:defaultValue="false"
    android:key="asd"
    android:title="@string/asd"
    android:widgetLayout="@layout/switchcompat_for_settings">

switchcompat_for_settings:

<android.support.v7.widget.SwitchCompat
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/checkbox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@null"
    android:clickable="false"
    android:focusable="false"
    android:gravity="center"
    />

没有动画。

使用此代码扩展 SwitchCompat(最佳尝试??): https ://gist.github.com/antifriz/ad4412b72d50f63ec977

从假到真有动画,从真到假没有动画。

非理想行为(但可以接受,如果无法阻止):如果值为 true,则在加载活动时播放动画。

使用以下代码进行扩展:

在 Android Lollipop 中扩展 Preference 类 = 丢失动画

根本没有动画。

@Override
public boolean isShown() {
    return getVisibility() == VISIBLE;
}

使用 SwitchPreference:

在 Lollipop 之前它有旧视图,所以不理想,因为我需要在 Lollipop 之前和之后使用不同的 xml。如果我只有一个 SwitchPreference 我仍然没有动画。通过几个连续的 SwitchPreferences,我得到了一个动画,但只有一个(我还检查了一个带有设置模板的新项目和同样的问题)。

此外,我更喜欢在任何偏好中都没有动画,而不是除了一个之外的所有动画。

添加第二个开关:

switchcompat_for_settings我添加了第二个 SwitchCompat 并将id=@android:id/checkbox设置为不可见。我扩展 CheckboxPreference 以覆盖 onBindView,并在调用后super.onBindView找到额外的 SwitchCompat 并调用setChecked适当的值。

onPreferenceClick中,我调用了我的额外开关的 setChecked。

它在没有动画的情况下切换。我的理解是,问题在于 onBindView 被调用了很多次(在创建首选项时,以及每次我切换它时),它会取消动画。

我试图添加一个布尔值来调用 onBindView 中的 setChecked ,仅在从 onClick 调用但没有成功之后。也许这是要走的路,我做错了什么。

唯一剩下的想法(不愿意这样做): 手动将开关添加到活动根视图,放置在正确的位置并处理具有此偏好的每个活动(几个)。

4

0 回答 0