Stellen wir uns vor, wir entwickeln zusammengesetzte Komponenten basierend auf LinearLayout. Also erstellen wir eine Klasse wie folgt:
public class SomeView extends LinearLayout {
public SomeView(Context context, AttributeSet attrs) {
super(context, attrs);
setOrientation(LinearLayout.VERTICAL);
View.inflate(context, R.layout.somelayout, this);
}
}
Wenn wir LinearLayout
als Root von verwenden somelayout.xml
, haben wir eine zusätzliche Ansichtsebene, daher verwenden wir das Merge-Tag:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Some text"
android:textSize="20sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Some other text"/>
</merge>
Auf der Registerkarte "Vorschau" in der IDE-Zusammenführung fungiert die Zusammenführung jedoch immer als FrameLayout, und wir werden Folgendes sehen:
(Es ist Android Studio, Intellij IDEA ist genauso, über Eclipse weiß ich nicht)
Die Vorschau beschleunigt die Entwicklung von Layouts erheblich. Es ist traurig, dass Sie selbst bei einigen Layouts eine so große Hilfe verlieren. Möglicherweise gibt es eine Möglichkeit festzulegen, wie die Vorschau das merge
Tag in einem bestimmten Layout interpretieren soll .
Antworten:
Es gibt ein neues Attribut parentTag tools ( hinzugefügt in Android Studio 2.2 ), mit dem Sie den Layouttyp für ein Zusammenführungs-Tag angeben können, damit das Layout in der Vorschau des Layout-Editors korrekt gerendert wird.
Verwenden Sie also Ihr Beispiel:
Hinweis : Beide
android:layout_width
undandroid:layout_height
müssen angegeben werden, damit das Layout im Editor ordnungsgemäß angezeigt wird.quelle
<com.yourpackage.yourcustomview id="@+id/my_cust_view" android:layout_width="match_parent" android:layout_height="match_parent"/>
Bearbeiten: Veraltete Antwort. Siehe Antwort von starkej2.
Android Studio 0.5.8 hat Unterstützung für Tools hinzugefügt: showIn. Mithilfe dieser Funktion können Sie eine Vorschau von <Zusammenführungs> -Layouts anzeigen.
http://tools.android.com/recent/androidstudio058released
layout / layout_merge.xml mit Tools: showIn:
layout / simple_relativelayout.xml mit include:
quelle
Es ist auch möglich, eine benutzerdefinierte Klasse als übergeordnete Klasse anstelle einer zusammengeführten Klasse zu verwenden
Und dann dieses Layout direkt aufblasen und die Ergebnisansicht auf
SomeView
. Android Studio überprüft direkt die übergeordnete Klasse vonSomeView
und behandelt die Vorschau wieLinerLayout
. Sie können dieonFinishInflate()
Methode in verwendenSomeView
, um Ansichten nach zu bindenfindViewById()
. Der Vorteil dieser Lösung besteht darin, dass Sie alle Layoutdefinitionen oder Stildefinitionen direkt in die LayoutdateisetOrientation()
einfügen können. Sie können keine Methode wie im Code verwenden.quelle