Android: Wie kann eine Ansicht vergrößert werden, um den verfügbaren Speicherplatz zu füllen?

89

Das scheint unkompliziert zu sein, aber ich kann nicht herausfinden, wie es geht. Ich habe ein horizontales Layout mit einem EditText und zwei ImageButtons. Ich möchte, dass die ImageButtons eine feste Größe haben und der EditText den verbleibenden Platz im Layout einnimmt. Wie kann dies erreicht werden?

<LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content">
        <EditText 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
        </EditText>
        <ImageButton 
            android:src="@drawable/img1"
            android:layout_width="50dip" 
            android:layout_height="50dip">
        </ImageButton>
        <ImageButton 
            android:src="@drawable/img2"
            android:layout_width="50dip" 
            android:layout_height="50dip">
        </ImageButton>
</LinearLayout>
ab11
quelle

Antworten:

51

Versuchen Sie dies im relativen Layout

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content">
    <ImageButton 
        android:id="@+id/btn1"
        android:src="@drawable/icon"
        android:layout_width="50dip" 
        android:layout_height="50dip"
        android:layout_alignParentRight="true"/>
    <ImageButton 
        android:id="@+id/btn2"
        android:src="@drawable/icon"
        android:layout_width="50dip" 
        android:layout_height="50dip"
        android:layout_toLeftOf="@+id/btn1"/>
    <EditText 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/btn2">
    </EditText>

</RelativeLayout>
Sunil Pandey
quelle
4
Danke dir. Das funktioniert super. (Außer dass die ImageButtons vor dem EditText definiert werden müssen, wie Joseph bemerkte).
ab11
1
fill_parent - Diese Konstante ist ab API-Ebene 8 veraltet und wird durch {@code match_parent} ersetzt.
Zon
144

Wenn Sie das Layout beibehalten möchten (dh Schaltflächen nach dem Text), verwenden Sie die layout_weightEigenschaft zusammen mit fill_parent:

<LinearLayout 
    android:orientation="horizontal"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content">
    <EditText 
        android:layout_weight="1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    </EditText>
    <ImageButton 
        android:src="@drawable/img1"
        android:layout_width="50dip" 
        android:layout_height="50dip">
    </ImageButton>
    <ImageButton 
        android:src="@drawable/img2"
        android:layout_width="50dip" 
        android:layout_height="50dip">
    </ImageButton>
 </LinearLayout>

Wenn Sie das EditText'Gewicht' angeben, wird es als letztes herausgefunden und den Tasten Vorrang eingeräumt. Spielen Sie mit den verschiedenen layout_weights und sehen Sie, wie viel Spaß Sie haben können!

Jonathan
quelle
1
Danke dir. Ich habe in meinem Layout 3 Bereiche (Überschriften, Inhalt - WebView und Fußzeile) das Problem gelöst, indem ich das WebView layout_weight = 1 und das footer's layout_weight = 0 gesetzt habe.
MKK
Ich kannte den Trick nicht, Gewicht und 0dp auf nur ein Kind einzustellen. Danke!
Marcel Bro
1
Wird dies allgemein als Best Practices angesehen? Es ist interessant, dass Sie die Reihenfolge beeinflussen können, in der Android die Ansichten auflöst.
Cypress Frankenfeld
2
Breite sollte 0 gehalten werden Ich denke
Bibaswann Bandyopadhyay
19

In Ordnung:

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

        <ImageButton 
            android:id="@+id/button1"
            android:src="@drawable/img1"
            android:layout_width="50dip"
            android:layout_alignParentTop="true" 
            android:layout_height="50dip">
        </ImageButton>
        <ImageButton 
            android:src="@drawable/img2"
            android:layout_width="50dip" 
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@id/button1"
            android:layout_height="50dip">
        </ImageButton>
        <EditText 
            android:layout_below="@id/button"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent">
        </EditText>
</RelativeLayout>

Die wichtigsten Punkte des Layouts sind:

  • Die Elemente mit fester Größe werden zuerst im Layout platziert. Auf diese Weise berücksichtigt Android bei der Berechnung der Höhe der Höhe von Dingen fill_parentspäter in der Datei nur den verbleibenden Speicherplatz, nicht den gesamten Speicherplatz, den es möglicherweise einnehmen könnte, wenn sonst war nichts da
  • Der EditText hat eine Höhe von fill_parent( match_parentin 2.2+), sodass er den Rest des verfügbaren Speicherplatzes einnimmt

Entschuldigung, ich habe Ihre Frage nicht genug gelesen. Der obige Code liefert die Antwort, wenn Sie dies vertikal tun möchten. Für ein horizontales Layout sollte der von @Sunil gepostete Code funktionieren.

Joseph Earl
quelle
Danke Joseph. Das funktioniert. Trotzdem gab ich Sunil die Ehre, etwas schneller zu sein.
ab11
12

Verwenden Sie Setzen Sie das layout_widthoder layout_heightauf 0dp(Durch die Ausrichtung möchten Sie den verbleibenden Raum füllen). Verwenden Sie dann die layout_weight, um den verbleibenden Platz zu füllen.

taynguyen
quelle