2013-08-24 2 views
10

Ich möchte eine horizontale LinearLayout haben, die so breit wie der Bildschirm ist und so hoch wie seine Kinder, aber der Trick ist, dass seine Kinder jeweils eine dynamische Breite haben und ich nicht will, dass sie vom Bildschirm verschwinden (ausgeschnitten). Ich möchte, dass sie in einer neuen Zeile fließen/brechen, so dass sie alle sichtbar sind.Horizontal Linearlayout mit mehreren Kindern, Move Kinder unter auf New Line Wenn No More Horizontal Raum

Obwohl für Android völlig irrelevant, sollte es ähnlich funktionieren wie inline <div> in HTML arbeiten.

Hier ist, was ich jetzt haben:

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="If you would enter some digits in this field " /> 
     <EditText 
      android:id="@+id/tvDistance" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:hint="enter some digits here"/> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text=" that would be great" /> 
    </LinearLayout> 

Aber sobald die Kinder der LinearLayout breiter bekommen als der Bildschirm der Extrateil des Bildschirms/unsichtbar aussteigt.

+0

Ich glaube nicht, dass das in Android-Layout machbar ist. Es sei denn, Sie implementieren Listener, die die Breite und was nicht messen und Ansichten nach unten verschieben. Die andere Möglichkeit ist, ein WebView zu erstellen und es zu füllen, ich weiß, dass es so machbar ist, aber ich habe keine Erfahrung in diesem Aspekt. Viel Glück. – LuckyMe

Antwort

14

Ich möchte eine horizontale Linearlayout haben, die so breit wie der Bildschirm ist und so hoch wie seine Kinder, aber der Trick ist, dass seine Kinder werden dynamische Breite jeder haben, und ich will sie nicht gehen Off-Screen (ausgeschnitten).

A LinearLayout kann, dass (eine beliebige Standard-Layout aus dem SDK das nicht können) nicht, weil die LinearLayout gesetzt alle die Kinder in einem horizontale oder vertikale Linie zu platzieren. Außerdem ist jede Art von bedingten Layoutregeln basierend auf Dimensionen, die noch nicht verfügbar sind (wie in Ihrem Fall die verfügbare Breite für die LinearLayout), in der XML sowieso nicht möglich.

Was Sie brauchen, ist ein benutzerdefiniertes Layout, das die Kinder mißt, um den verfügbaren Platz zu verwenden, um nicht passende Kinder in eine neue Zeile zu verschieben (eine sogenannte FlowLayout).

Edit:

Google bietet jetzt die flexbox-Bibliothek, die die Flexbox Layout auf Android Web implementiert. Unter Verwendung dieser Bibliothek werden die Kinder eines FlexboxLayout auf mehreren Linien auf ihre Breiten auf Basis platziert werden, indem die Verwendung von flexDirection (mit einem Wert von Reihe) und flexWrap (mit einem Wert von Wrap) Attribute.

+0

defekte Videoverbindung –

+0

@ViperAlpha Ja, die Seite der Parleys ist weg. Ich habe nach einem Ersatzvideo gesucht, aber ich konnte keins finden. Das Video stammt von Chet Haase, einem Entwickler von Android-SDK, der über das Erstellen von benutzerdefinierten Ansichten und das Erstellen eines FlowLayouts in diesem Prozess redet. Es gibt Bibliotheken, die dieses Layout implementieren, wenn Sie Bibliotheken wie https://github.com/ApmeM/android-flowlayout benötigen. – Luksprog

+1

Sie haben herausgefunden, dass Google eigene implementiert hat: https://github.com/google/flexbox-layout, It wäre nett für Sie, um es in Ihrer anwer –