17 Stimmen

Layout-Parameter in Android einstellen

Die Arbeit mit der XML-Datei war einfach, da ich die Parameter wie folgt angeben konnte

<android:layout_width="fill_parent" android:layout_height="wrap_content">

Aber ich bin verwirrt, während ich es durch Code spezifiziere. Für jede Ansicht gebe ich die Parameter mit

view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT)); 

Ich sehe, dass ich die Möglichkeit habe, es als relatives Layout, als Rahmenlayout usw. festzulegen. Im Moment verwende ich lineares Layout für alle Ansichten wie Bilder, Text und auch Gridview. Sollten die Ansichtsparameter auf der Grundlage des Layouts des übergeordneten Elements definiert werden? Oder ist es in Ordnung, sie als lineares Layout zu definieren, auch wenn die Ansicht ein Kind von, sagen wir, einem Framelayout ist? Entschuldigung, aber ich konnte den Unterschied nicht herausfinden.

19voto

inazaruk Punkte 73187

Alle Layout-Klassen ( LinearLayout , RelativeLayout , etc.) erweitern ViewGroup .

En ViewGroup Klasse hat zwei statische innere Klassen: LayoutParams y MarginLayoutParams . Und ViewGroup.MarginLayoutParams erstreckt sich tatsächlich ViewGroup.LayoutParams .


Manchmal benötigen Layout-Klassen zusätzliche Layout-Informationen, um mit der untergeordneten Ansicht verbunden zu werden. Zu diesem Zweck definieren sie ihre internen statischen LayoutParams Klasse. Zum Beispiel, LinearLayout hat:

public class LinearLayout extends ViewGroup {
   ...
   public static class LayoutParams extends ViewGroup.MarginLayoutParams {  
   ...
   }
}

Dasselbe gilt für RelativeLayout :

public class RelativeLayout extends ViewGroup {
   ...
   public static class LayoutParams extends ViewGroup.MarginLayoutParams {  
   ...
   }
}

Aber LinearLayout.LayoutParams y RelativeLayout.LayoutParams sind völlig unterschiedliche, unabhängige Klassen. Sie speichern verschiedene zusätzliche Informationen über untergeordnete Ansichten.

Zum Beispiel, LinearLayout.LayoutParams kann assoziieren weight Wert mit jeder Ansicht, während RelativeLayout.LayoutParams kann nicht. Das Gleiche gilt für RelativeLayout.LayoutParams : Sie kann Werte wie above , below , alightWithParent mit jeder Ansicht. Und LinearLayout.LayoutParams verfügen einfach nicht über diese Fähigkeiten.


Im Allgemeinen müssen Sie also Folgendes verwenden LayoutParams aus dem umschließenden Layout, damit Ihre Ansicht korrekt positioniert und gerendert wird. Beachten Sie jedoch, dass alle LayoutParams dieselbe übergeordnete Klasse haben ViewGroup.LayoutParams . Und wenn Sie nur Funktionen verwenden, die in dieser Klasse definiert sind (wie in Ihrem Fall WRAP_CONTENT y FILL_PARENT ) können Sie einen funktionierenden Code erhalten, auch wenn dieser falsch ist. LayoutParams Klasse wurde verwendet, um Layout-Parameter festzulegen.

10voto

Sandy Simonton Punkte 586

Je nachdem, für wie viele Ansichten Sie die Layouts ändern möchten, ist es meiner Meinung nach besser, eine Hilfsmethode zu erstellen und die zu ändernden Ansichten zusammen mit den Werten für Höhe und Breite an die Methode zu übergeben:

public void setWidthHeight(View v, int width, int height){
    LayoutParams lp;
    lp = v.getLayoutParams();
    lp.width = width;
    lp.height = height;
    v.setLayoutParams(lp);
}

Denken Sie daran, dass die hier festgelegten Werte für Breite und Höhe nicht mit den Werten in Ihrer XML-Datei übereinstimmen, d. h. Android:layout_width="32dp" ist nicht dasselbe wie lp.width = 32;

Außerdem sollte die Variable vom Typ LayoutParams mit dem Namen lp vom Typ sein, der von Ihrer Ansicht zurückgegeben wird... Prüfen Sie, welcher Typ von der Ansicht zurückgegeben wird, und importieren Sie diesen Typ in Ihren Importanweisungen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X