Le troisième constructeur est beaucoup plus compliqué, laissez-moi vous donner un exemple.
Support-v7 SwitchCompact
prend en charge thumbTint
et trackTint
attribut depuis la version 24 alors que la version 23 ne les prend pas en charge.Maintenant, vous voulez les prendre en charge dans la version 23 et comment ferez-vous pour y parvenir?
Nous supposons que vous utilisez des SupportedSwitchCompact
extensions de vue personnalisées 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();
}
C'est un style de code traditionnel. Notez que nous passons 0 au troisième paramètre ici . Lorsque vous exécutez le code, vous trouverez getThumbDrawable()
toujours return null à quel point il est étrange car la méthode getThumbDrawable()
est la méthode de sa super classe SwitchCompact
.
Si vous passez R.attr.switchStyle
au troisième paramètre, tout se passe bien, alors pourquoi?
Le troisième paramètre est un attribut simple. L'attribut pointe vers une ressource de style. Dans le cas ci-dessus, le système trouvera l' switchStyle
attribut dans le thème courant, heureusement que le système le trouve.
Dans frameworks/base/core/res/res/values/themes.xml
, vous verrez:
<style name="Theme">
<item name="switchStyle">@style/Widget.CompoundButton.Switch</item>
</style>