54 Stimmen

Gitterlayout Spaltenbreite

Ich habe 2 Spalten in meinem GridLayout. Was ich tun möchte, ist, dass diese Spalten jeweils die Hälfte der Bildschirmbreite einnehmen und dann ihre untergeordneten Inhalte die Breite/Höhe ihrer eigenen Zellen füllen. Ich habe versucht, die Kinder auf fill_parent zu setzen, aber das führt nur dazu, dass der erste die gesamte Layout übernimmt. Und es scheint, dass GridLayout weight nicht unterstützt? Vielleicht gibt es ein besseres Layout, das verwendet werden kann, aber ich möchte ein Rasterlayout verwenden, also scheint das die natürliche Wahl zu sein.

71voto

Tobliug Punkte 2832

Dieser Code ist auf Pre-API21 mit Support-Bibliothek verfügbar!

Ich habe ein einfaches Stück Code, um 4 Buttons in einem Rasterlayout mit 2 Spalten anzuzeigen, die 50% des verfügbaren Platzes einnehmen: vielleicht kann es helfen

Die Lösung ist vielleicht diese:

android:layout_gravity="fill"
android:layout_columnWeight="1"

16voto

Mehmet Katircioglu Punkte 1200

Für vor API 21, verwenden Sie die Support-Bibliothek:

fügen Sie hinzu

compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'

zu Ihren Abhängigkeiten.

Dann in Ihrer XML-Datei:

Hier beachten Sie die Verwendung des "app" Präfix und vergessen Sie nicht hinzuzufügen

xmlns:app="http://schemas.android.com/apk/res-auto"

zu Ihrer XML-Datei

11voto

Naresh Palle Punkte 319

Das Hinzufügen von Ansichten dynamisch in einem Rasterlayout mit 2 Spalten, die 50% des verfügbaren Platzes einnehmen:

GridLayout gridLayout = new GridLayout();

View view; //es kann jede Ansicht sein

GridLayout.LayoutParams param = new GridLayout.LayoutParams();

param.columnSpec = GridLayout.spec(GridLayout.UNDEFINED,GridLayout.FILL,1f);

param.width = 0;

view.setLayoutParams(param);

gridLayout.add(view);

auf statische Weise (in der .xml-Datei).

5voto

bwoogie Punkte 4281

Ok, also habe ich die Rasteransicht aufgegeben und stattdessen lineare Layouts verwendet. Ich habe ein vertikales erstellt und dann 2 horizontale hinzugefügt. Es ist etwas aufwändiger als die Rasteransicht... aber bis ich das herausfinde, funktioniert das zumindest.

Und dann füge ich das hinzu, um die Buttons quadratisch zu machen :)

@Override
 public void onWindowFocusChanged(boolean hasFocus) {
  super.onWindowFocusChanged(hasFocus);

  btnPrefs.setMinimumHeight(btnPrefs.getWidth());
  btnVerse.setMinimumHeight(btnMyButton.getWidth());

 }

0voto

se_bastiaan Punkte 1717

Sie könnten die RelativeLayout-Klasse erweitern (oder LinearLayout verwenden, wenn Sie möchten), um sicherzustellen, dass die Höhe des Elements gleich der Höhe ist.

public class GridItem extends RelativeLayout {

        public GridItem(Context context) {
                super(context);
        }

        public GridItem(Context context, AttributeSet attr) {
                super(context, attr);
        }

        public GridItem(Context context, AttributeSet attr, int integer) {
                super(context, attr, integer);
        }

        // Überschreiben Sie onMeasure, um der Ansicht die gleiche Höhe wie die angegebene Breite zu geben
        @Override
        public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            super.onMeasure(widthMeasureSpec, widthMeasureSpec);
            setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth());
        }

}

Die Elternansicht des Element-Layouts sollte die GridItem-Ansicht sein, um sicherzustellen, dass es funktioniert. Dies muss die Layoutdatei sein, die Sie in getView Ihres ListAdapter aufblasen werden.

Und setzen Sie den stretchMode des GridView auf columnWidth. Dadurch passen alle Elemente in die Breite der angegebenen Anzahl von Spalten. Die neue Ansicht stellt sicher, dass sie auch die gleiche Höhe haben.

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