これは、受け入れられた回答の SwitchCompat ウィジェットのアニメーションに関するものです。
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);