ich eine „Karte“ habe, das ist eine einfache Linearlayout mit einem Textview innerhalb, wie man richtig Linearlayout Erweitern eine benutzerdefinierte Ansicht erstellen
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/card_label_txt"
android:layout_width="wrap_content"
android:text="label" />
</LinearLayout>
dann habe ich mein Haupt Fragment mit einem vertikalen Linearlayout .. und in ich das Haupt-Fragment dieses „Karten“ in das Hauptlayout hinzu:
# main fragment layout
View view = inflater.inflate(R.layout.main_activity, null);
LinearLayout ll = (LinearLayout) view
.findViewById(R.id.main_activity_ll);
# get card
View card = inflater.inflate(R.layout.card, null);
# add to fragment layout
ll.addView(card);
das funktioniert sehr gut und meine Karte füllt die gesamte Breite des Fragments Layout. Eigentlich was ich erwarte.
Jetzt habe ich eine separate Klasse für meine Karte:
Class Card extends LinearLayout{
public Card(Context context) {
super(context);
View view = LayoutInflater.from(getContext()).inflate(
R.layout.card, null);
this.addView(view);
}
}
Und dann, wenn ich meine Karte mit dem Haupt Fragment-Layout in der Art und Weise hinzufügen:
# main fragment layout
View view = inflater.inflate(R.layout.main_activity, null);
LinearLayout ll = (LinearLayout) view
.findViewById(R.id.main_activity_ll);
# add new Card to fragment layout
ll.addView(new Card(getActivity());
dann wird hinzugefügt, ABER Die Breite der Karte wird nicht mehr ausgefüllt, sondern in die Textansicht übernommen.
Könnte mir bitte jemand erklären, warum ich verschiedene Breitengrößen durch diese zwei Methoden zum Hinzufügen der gleichen Layouts bekomme?
Lösung hier ist Klasse Karte geändert, die dieses Problem löst:
public Card(Context context) {
super(context);
LayoutInflater.from(getContext()).inflate(
R.layout.card, this);
}
}
Sind Sie sicher, dass Ihre 'Card' Breite verändert und nicht' LinearLayout'? – eleven
ja. Ich vereinfachte die Frage zum besseren Verständnis, da ich mit komplexeren Dingen arbeite. Aber die Sache ist, dass die "Karte" direkt zum Layout und über eine neue Klasse hinzugefügt wird - mit anderen Ergebnissen. Ich nehme an, dass die Eltern-Layout-Breite durch Hinzufügen einer neuen Klasse irgendwie nicht verifiziert werden konnte. – user1908375