Estendendo classes de preferência no Android Lollipop = perdendo animação
Apenas para estenderCheckBoxPreference ouSwitchPreference no Android Lollipop, o widget (a caixa de seleção ou a opção) não terá mais animação.
Gostaria de estender o SwitchPreference para forçar a API <21 a usar o SwitchCompat em vez do padrão que eles estão usando (o que está obviamente errado).
Estou usando o novoAppCompatPreferenceActivity comappcompat-v7:22.1.1
mas isso não parece afetar os comutadores.
O problema é que, ao estender essas classes, sem adicionar nenhum layout personalizado ou recurso de widget, a animação desapareceu.
Eu sei que posso escrever duas instâncias da minha preferência.xml (em valores internos-v21) e funcionará ... Mas eu gostaria de saber por que isso está acontecendo e se alguém conhece uma solução sem ter duas preferência.xml.
Exemplo de código:
public class SwitchPreference extends android.preference.SwitchPreference {
public SwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public SwitchPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public SwitchPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SwitchPreference(Context context) {
super(context);
}
}
Isso ou o mesmo para CheckBoxPreference e, em seguida, usando:
<com.my.package.SwitchPreference />
Fará a animação em um dispositivo Lollipop desaparecer.
-
Outra coisa que tentei para o SwitchPreference (que posso com o CheckBoxPreference) é fornecer um layout com o ID padrão, mas@android:id/switchWidget
não é público enquanto@android:id/checkbox
é. Eu também sei que posso usar um<CheckBoxPreference />
e forneça um layout de widget que seja de fato um SwitchCompat, mas eu gostaria de evitar isso (confundindo os nomes).