Android: Mehrere anzeigen Kinder für die benutzerdefinierte Ansicht mit den bestehenden layout
Muss ich bauen eine komplexere benutzerdefinierte Ansicht in Android. Das endgültige layout sollte wie folgt Aussehen:
<RelativeLayout>
<SomeView />
<SomeOtherView />
<!-- maybe more layout stuff here later -->
<LinearLayout>
<!-- the children -->
</LinearLayout>
</RelativeLayout>
Jedoch in den XML-Dateien, die ich will einfach nur tun, definieren Sie diese (ohne die Festlegung SomeView, SomeOtherView etc.):
<MyCustomView>
<!-- the children -->
</MyCustomView>
Ist das möglich in Android, und wenn ja: Was wäre der sauberste Weg, es zu tun?
Die möglichen Lösungen, die mir in den Sinn kam waren 'überschreiben Sie die addView () - Methoden' und 'entfernen Sie alle Ansichten, und fügen Sie diese später wieder', aber ich bin nicht sicher, welchen Weg zu gehen...
Vielen Dank im Voraus für Eure Hilfe! 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist absolut möglich, und ermutigt werden, zu erstellen Sie benutzerdefinierte container views. Dies ist, was Android nennen würde, eine verbundregelung. Also:
Können Sie überschreiben, wie viele Versionen von
addView()
wie Sie fühlen, sind notwendig, aber am Ende werden Sie alle rufen zurück, um die version, die ich gelegt in der Probe. Überschreiben Sie einfach diese Methode wird der Rahmen an alle Kinder fanden die innerhalb der XML-Tags zu einem bestimmten untergeordneten container.Und ändern Sie dann die XML-als solche:
res/layout/custom_layout.xml
Der Grund für die Verwendung
<merge>
ist die Vereinfachung der Hierarchie. Alle untergeordneten Ansichten erhalten, die an Ihre benutzerdefinierte Klasse, die eineRelativeLayout
. Wenn Sie nicht<merge>
Sie am Ende mit einemRelativeLayout
an einen anderenRelativeLayout
befestigt, um alle die Kinder, die Probleme verursachen können.HTH
addView()
wie du Sie beschrieben hast. Ich bearbeitet das Beispiel oben.Card
erweiternLinearLayout
enthält eineTextView
als Titel und andereLinearLayout
mit den Kindern die Karte. Jedoch, während das aufblasen der card.xml im KonstruktorCard.addView()
ist aufgerufen, die versucht, die Karte wird selbst zu einem Ihrer Kinder, was in einerNullPointerException
...MyCustomView
erstrecktRelativeLayout
und den container, der Kinder Hinzugefügt werden, ist einLinearLayout
, Seitenränder in der XML für diejenigen Kinder, die nicht eingehalten werden. ÄndernMyCustomView
zu erweiternLinearLayout
jedoch respektiert Kinder Margen wie erwartet. Ist es eine Bekehrung, die getan werden muss, um zwischen den beiden ViewGroup istLayoutParams
um dies zu unterstützen?können Sie mit dem include-tag