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/switchWidgetnã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).

questionAnswers(4)

yourAnswerToTheQuestion