O terceiro construtor é muito mais complicado. Deixe-me dar um exemplo.
O SwitchCompact
pacote Support-v7 suporta thumbTint
e trackTint
atribui desde a versão 24, enquanto a versão 23 não os suporta. Agora você deseja apoiá-los na versão 23 e como fará para conseguir isso?
Assumimos usar personalizado Ver SupportedSwitchCompact
estende SwitchCompact
.
public SupportedSwitchCompat(Context context) {
this(context, null);
}
public SupportedSwitchCompat(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public SupportedSwitchCompat(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init(){
mThumbDrawable = getThumbDrawable();
mTrackDrawable = getTrackDrawable();
applyTint();
}
É um estilo de código tradicional. Observe que passamos 0 para o terceiro parâmetro aqui . Ao executar o código, você getThumbDrawable()
sempre retornará nulo o quão estranho é, porque o método getThumbDrawable()
é o método de sua superclasse SwitchCompact
.
Se você passar R.attr.switchStyle
para o terceiro parâmetro, tudo vai bem.
O terceiro parâmetro é um atributo simples. O atributo aponta para um recurso de estilo. No caso acima, o sistema encontrará o switchStyle
atributo no tema atual, felizmente, o sistema o encontrará.
Em frameworks/base/core/res/res/values/themes.xml
, você verá:
<style name="Theme">
<item name="switchStyle">@style/Widget.CompoundButton.Switch</item>
</style>