スイッチのアニメーションを機能させるために 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
false から true になるとアニメーションがあり、true から false になるとアニメーションはありません。
理想的ではない動作 (ただし、防止できない場合は許容されます): 値が true の場合、アクティビティが読み込まれるとアニメーションが再生されます。
次のコードで拡張します。
Android Lollipop で Preference クラスを拡張する = アニメーションが失われる
アニメーションは一切ありません。
@Override
public boolean isShown() {
return getVisibility() == VISIBLE;
}
SwitchPreference の使用:
Lollipop の前は古いビューなので、Lollipop の前と後で異なる xml が必要になるため、理想的ではありません。SwitchPreference が 1 つしかない場合でも、アニメーションはありません。いくつかの連続した SwitchPreferences を使用すると、1 つを除くすべてでアニメーションが表示されます (設定テンプレートを使用した新しいプロジェクトと同じ問題も確認しました)。
また、私は、1 つを除くすべてのアニメーションよりも、どの環境設定にもアニメーションがないことを好みます。
2 番目のスイッチの追加:
switchcompat_for_settingsで、2 つ目のSwitchCompatを追加し、id=@android:id/checkboxを非表示に設定します。CheckboxPreference を拡張して onBindView をオーバーライドし、呼び出した後super.onBindView
、追加の SwitchCompat を見つけてsetChecked
適切な値を呼び出します。
onPreferenceClickで、追加のスイッチの setChecked を呼び出します。
アニメーションなしでトグルします。私の理解では、問題は onBindView が何度も呼び出されるため (設定を作成するとき、および切り替えるたびに)、アニメーションがキャンセルされることです。
onClick から呼び出された後にのみ onBindView で setChecked を呼び出すブール値を追加しようとしましたが、成功しませんでした。多分それは行くべき道であり、私は何か間違ったことをしました.
残りのアイデアのみ (これを実行するつもりはありません): スイッチを手動でアクティビティ ルート ビューに追加し、正しい位置に配置して、この設定 (いくつか) を持つ各アクティビティからハンドルします。