这是关于已接受答案中 SwitchCompat 小部件的动画。
我发现问题是由 Preference 类中的一个标志引起的,在 Android 4.0-4.3 中,该标志是 mHasSpecifiedLayout,在 Android 4.4 中,该标志是 mCanRecycleLayout。
当您使用 setWidgetLayoutResource 设置小部件时,它将更改此标志。
如果您使用不同的包名称(android.preference 或 com.android 除外)创建新的自定义首选项类,它也会更改此标志。
当 mHasSpecifiedLayout 为 false 或 CanRecycleLayout 为 true 时,动画将起作用,否则动画不起作用。
所以你可以使用反射而不是 setWidgetLayoutResource() 方法来设置小部件布局,这样动画就不会被破坏。
这是一个片段:
CheckBoxPreference switchPref = new CheckBoxPreference(getActivity());
try {
Field field = Preference.class.getDeclaredField("mWidgetLayoutResId");
field.setAccessible(true);
field.setInt(switchPref, R.layout.preference_switch_layout);
} catch (Exception e) {
switchPref.setWidgetLayoutResource(R.layout.preference_switch_layout);
}
switchPref.setKey(key);
switchPref.setTitle(titleRes);
switchPref.setSummary(summaryRes);
switchPref.setDefaultValue(defaultValue);