MyView (Kontextkontext)
Wird verwendet, wenn Ansichten programmgesteuert instanziiert werden.
MyView (Kontextkontext, AttributeSet-Attribute)
Wird von verwendet LayoutInflater
, um XML-Attribute anzuwenden. Wenn eines dieser Attribute benannt ist style
, werden die Attribute im Stil nachgeschlagen, bevor nach expliziten Werten in der XML-Layoutdatei gesucht wird.
MyView (Kontextkontext, AttributeSet-Attribute, int defStyleAttr)
Angenommen, Sie möchten einen Standardstil auf alle Widgets anwenden, ohne dies style
in jeder Layoutdatei angeben zu müssen. Zum Beispiel lassen Sie alle Kontrollkästchen standardmäßig rosa werden. Sie können dies mit defStyleAttr tun, und das Framework sucht nach dem Standardstil in Ihrem Thema.
Beachten Sie, dass dies defStyleAttr
vor defStyle
einiger Zeit falsch benannt wurde und es einige Diskussionen darüber gibt, ob dieser Konstruktor wirklich benötigt wird oder nicht. Siehe https://code.google.com/p/android/issues/detail?id=12683
MyView (Kontextkontext, AttributeSet-Attribute, int defStyleAttr, int defStyleRes)
Der 3. Konstruktor funktioniert gut, wenn Sie die Kontrolle über das Basisthema der Anwendungen haben. Das funktioniert bei Google, weil sie ihre Widgets neben den Standardthemen versenden. Angenommen, Sie schreiben eine Widget-Bibliothek und möchten, dass ein Standardstil festgelegt wird, ohne dass Ihre Benutzer ihr Thema anpassen müssen. Sie können dies jetzt tun, defStyleRes
indem Sie es in den beiden ersten Konstruktoren auf den Standardwert setzen:
public MyView(Context context) {
super(context, null, 0, R.style.MyViewStyle);
init();
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs, 0, R.style.MyViewStyle);
init();
}
Alles in allem
Wenn Sie Ihre eigenen Ansichten implementieren, sollten nur die beiden ersten Konstruktoren benötigt werden und können vom Framework aufgerufen werden.
Wenn Sie möchten, dass Ihre Ansichten erweiterbar sind, implementieren Sie möglicherweise den 4. Konstruktor, damit Kinder Ihrer Klasse das globale Styling verwenden können.
Ich sehe keinen wirklichen Anwendungsfall für den 3. Konstruktor. Möglicherweise eine Verknüpfung, wenn Sie keinen Standardstil für Ihr Widget angeben und dennoch möchten, dass Ihre Benutzer dies tun können. Sollte nicht so viel passieren.