Wie lässt sich das Layout mit View den verbleibenden Platz füllen?

Lesezeit: 7 Minuten

Benutzer-Avatar
Lukas Wo

Ich entwerfe meine Anwendungs-UI. Ich brauche ein Layout, das so aussieht:

Beispiel für gewünschtes Layout

(< und > sind Schaltflächen). Das Problem ist, ich weiß nicht, wie ich sicherstellen kann, dass die TextView den verbleibenden Platz ausfüllt, wobei zwei Schaltflächen eine feste Größe haben.

Wenn ich fill_parent für die Textansicht verwende, kann die zweite Schaltfläche (>) nicht angezeigt werden.

Wie kann ich ein Layout erstellen, das wie das Bild aussieht?

  • Was verwendest du als Root-Layout?

    – holzscheu

    11. Juni 2011 um 14:49 Uhr

  • @woodshy Jedes Layout ist in Ordnung, es spielt keine Rolle.

    – Lukas Vo

    11. Juni 2011 um 15:11 Uhr

Benutzer-Avatar
Vivek Pandey

Die Antwort von Woodshy hat bei mir funktioniert und ist einfacher als die Antwort von Ungureanu Liviu, da sie nicht verwendet wird RelativeLayout. Ich gebe mein Layout zur Verdeutlichung:

<LinearLayout 
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:orientation="horizontal"
      >

     <Button
        android:layout_width = "80dp"
        android:layout_weight = "0"
        android:layout_height = "wrap_content"
        android:text="&lt;"/>
     <TextView
        android:layout_width = "fill_parent"
        android:layout_height = "wrap_content"
        android:layout_weight = "1"/>
     <Button
        android:layout_width = "80dp"
        android:layout_weight = "0"
        android:layout_height = "wrap_content"
        android:text="&gt;"/>   
 </LinearLayout>

  • Es gibt sowas wie alignLeft und alignParentLeftusw., was niemals erreicht werden kann LinearLayout.

    – Eisige Flamme

    28. Juni 2016 um 7:23 Uhr

  • Ich verstehe nicht ganz, wie das möglich ist, aber es ist wirklich ein cooler Trick, RelativeLayout zu vermeiden

    – a. dibacco

    19. Januar 2017 um 21:11 Uhr

  • Wie kann dies die akzeptierte Antwort sein? Es gibt keine Bildansicht, es ist nur ein Teil der Lösung. Zumindest ist es besser als die alte am besten bewertete Antwort mit relativem Layout (ich habe in meiner Antwort erklärt, warum)

    – Livio

    7. Oktober 2017 um 17:27 Uhr

Benutzer-Avatar
holzscheu

Wenn <TextView> wird in a platziert LinearLayoutsetzen Sie die Layout_weight Eigentum von < und > auf 0 und 1 für die TextView.

Wenn Sie eine verwenden RelativeLayoutausrichten < und > nach links und rechts und legen Sie die Eigenschaften “Layout links von” und “Layout rechts von” fest TextView zu den IDs von < und >.

  • Braucht noch jemand Muster?

    – holzscheu

    11. Juni 2011 um 16:18 Uhr

  • So fügen Sie diesem Layout Bilder hinzu, um die gesamte Ansicht auszufüllen

    – Tushar Pandey

    25. Mai 2014 um 11:43 Uhr

  • @woodshy ja ein Muster wäre noch hilfreich

    – Frank Schwietermann

    25. September 2014 um 20:59 Uhr

  • Was es schwierig machte, dem zu folgen, war “< und >“, das sich auf den ursprünglichen Beitragsbegriff bezieht. Gemeint sind die Schaltflächen mit der Bezeichnung „<“ bzw. „>“.

    – Farrukh Najmi

    3. Mai 2017 um 13:52 Uhr

  • @woodshy Beispiel würde es besser machen, oder?

    – Steve Moretz

    4. Februar 2019 um 5:50 Uhr

Benutzer-Avatar
Ungureanu Liviu

Wenn du benutzt RelativeLayoutdas kannst du so machen:

<RelativeLayout
    android:layout_width = "fill_parent"
    android:layout_height = "fill_parent">
    <ImageView
        android:id = "@+id/my_image"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_alignParentTop ="true" />
    <RelativeLayout
        android:id="@+id/layout_bottom"
        android:layout_width="fill_parent"
        android:layout_height = "50dp"
        android:layout_alignParentBottom = "true">
        <Button
            android:id = "@+id/but_left"
            android:layout_width = "80dp"
            android:layout_height = "wrap_content"
            android:text="&lt;"
            android:layout_alignParentLeft = "true"/>
        <TextView
            android:layout_width = "fill_parent"
            android:layout_height = "wrap_content"
            android:layout_toLeftOf = "@+id/but_right"
            android:layout_toRightOf = "@id/but_left" />
        <Button
            android:id = "@id/but_right"
            android:layout_width = "80dp"
            android:layout_height = "wrap_content"
            android:text="&gt;"
            android:layout_alignParentRight = "true"/>
    </RelativeLayout>
</RelativeLayout>

  • Danke, es funktioniert 🙂 Aber ich verstehe nicht. Warum füllt die TextView nicht den gesamten Platz aus, nicht für die > Taste?

    – Lukas Vo

    11. Juni 2011 um 15:09 Uhr


  • Warum zwei verschachtelte relative Layouts? Die Wurzel sollte ausreichen. Dann müssen Sie nur noch sicherstellen, dass die untergeordneten Elemente des unteren relativen Layouts alle alignParentBottom=”true” sind.

    – Noel

    11. Juni 2011 um 15:10 Uhr

  • @Noel Du hast recht. Ich wähle 2 Layouts, weil ich das gewohnt bin: In meinen Anwendungen kann es vorkommen, dass ich die Sichtbarkeit einiger Ansichten ändern muss und es einfacher ist, alle in ein Layout zu packen und die Sichtbarkeit nur für dieses Layout zu ändern . Mein Beispiel ist nicht perfekt, aber es funktioniert und könnte für jemanden nützlich sein.

    – Ungureanu Liviu

    11. Juni 2011 um 15:48 Uhr

  • @WN Das ist auch für mich seltsam 🙂 Ich denke, die Textansicht verwendet nicht den gesamten Platz, da die rechte Schaltfläche eine feste Breite hat. Wenn Sie android:layout_width = “80dp” in android:layout_width = “wrap_content” für die rechte Schaltfläche ändern, sollte es funktionieren.

    – Ungureanu Liviu

    11. Juni 2011 um 15:51 Uhr

  • Diese Antwort ist wirklich schlecht! Sie sollten es vermeiden, 2 relative Layouts zu verschachteln, da das relative Layout immer 2 Durchgänge zum Zeichnen macht (gegenüber 1 für jede andere Art von Layout). Es wird exponentiell, wenn Sie sie verschachteln. Sie sollten ein lineares Layout mit Breite = 0 und Gewicht = 1 für das Element verwenden, das Sie den verbleibenden Platz füllen möchten. Denken Sie daran: Verwenden Sie das relative Layout NUR, wenn Sie keine andere Wahl haben. stackoverflow.com/questions/4069037/…

    – Livio

    5. November 2015 um 10:35 Uhr

Verwendung einer ConstraintLayoutich habe so etwas gefunden

<Button
    android:id="@+id/left_button"
    android:layout_width="80dp"
    android:layout_height="48dp"
    android:text="&lt;"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toRightOf="@+id/left_button"
    app:layout_constraintRight_toLeftOf="@+id/right_button"
    app:layout_constraintTop_toTopOf="parent" />

<Button
    android:id="@+id/right_button"
    android:layout_width="80dp"
    android:layout_height="48dp"
    android:text="&gt;"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

funktioniert. Der Schlüssel liegt darin, die Einschränkungen für die rechte, linke, obere und untere Kante entsprechend festzulegen und dann die Breite und Höhe auf festzulegen 0dp und es seine eigene Größe herausfinden lassen.

Es ist ganz einfach Sie stellen die minWidth oder minHeight ein, je nachdem, wonach Sie suchen, horizontal oder vertikal. Und für das andere Objekt (dasjenige, das Sie den verbleibenden Platz füllen möchten) legen Sie ein Gewicht von 1 fest (stellen Sie die Breite ein, um seinen Inhalt zu umschließen), sodass es den Rest des Bereichs ausfüllt.

<LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center|left"
        android:orientation="vertical" >
</LinearLayout>
<LinearLayout
        android:layout_width="80dp"
        android:layout_height="fill_parent"
        android:minWidth="80dp" >
</LinearLayout>

Benutzer-Avatar
Ironie-Stack

Sie können das hohe layout_weight-Attribut verwenden. Unten sehen Sie ein Layout, in dem ListView den gesamten freien Speicherplatz mit Schaltflächen unten einnimmt:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".ConfigurationActivity"
    android:orientation="vertical"
    >

        <ListView
            android:id="@+id/listView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1000"
            />


        <Button
            android:id="@+id/btnCreateNewRule"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Create New Rule" />



        <Button
            android:id="@+id/btnConfigureOk"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Ok" />


</LinearLayout>

Benutzer-Avatar
Livio

Sie sollten es vermeiden, 2 relative Layouts zu verschachteln, da das relative Layout immer 2 Durchgänge zum Zeichnen macht (gegenüber 1 für jede andere Art von Layout). Es wird exponentiell, wenn Sie sie verschachteln. Sie sollten ein lineares Layout mit Breite = 0 und Gewicht = 1 für das Element verwenden, das Sie den verbleibenden Platz füllen möchten. Diese Antwort ist besser für die Leistung und die Praktiken. Denken Sie daran: Verwenden Sie das relative Layout NUR, wenn Sie keine andere Wahl haben.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical">

    <ImageView
        android:id="@+id/imageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal">

        <Button
            android:id="@+id/prev_button"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="&lt;" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ellipsize="end"
            android:singleLine="true"
            android:gravity="center"
            android:text="TextView" />

        <Button
            android:id="@+id/next_button"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="&gt;" />
    </LinearLayout>
</LinearLayout>

1347900cookie-checkWie lässt sich das Layout mit View den verbleibenden Platz füllen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy