2017-01-29 3 views
0

Ich habe eine LinearLayout, die eine TextView und eine ImageView enthält. Die TextView-Breite ist auf wrap_content festgelegt, aber das Problem tritt auf, wenn die Breite die übergeordnete Breite erreicht. Der Textinhalt wird korrekt in zwei oder mehr Zeilen umgebrochen, aber TextView und ImageView werden auf der linken und rechten Seite abgeschnitten. Die ähnlichste Frage, die ich finden konnte, war this one, die von 2013 ist und keine Lösung hat.LinearLayout Ausschnitt Kinder mit TextView Breite auf wrap_content

Insbesondere bin ich auf this view das Problem erlebt, aber ich habe die folgende einfachere Ansicht erstellt, um das Problem veranschaulichen:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/card_top_holder" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:orientation="horizontal"> 

    <TextView 
     android:id="@+id/card_top_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="One Two Three Four Five" 
     android:textSize="40sp"/> 

    <ImageView 
     android:layout_width="24dp" 
     android:layout_height="24dp" 
     android:src="@drawable/ic_volume_up_black_48dp"/> 
</LinearLayout> 

Hier ist das Problem: LinearLayout with children being clipped Hier ist das Layout der Regel:

Wenn das Layout eine andere Ansicht überlappt, verhindert die Einstellung android:clipChildren="false" auf dem LinearLayout nicht einmal das Clipping.

Und hier ist ein letztes Bild, um es geschieht auf einem realen Gerät zu beweisen, und nicht nur das Layout Zuschauer: clipped views on a real device

Ich bin im Grunde aus Ideen. Irgendwelche Gedanken? Ist das ein Problem mit dem Android-Layout-System? Danke für die Hilfe und Rücksicht!

Antwort

1

Sie können das gewünschte Ergebnis erzielen mit android:layout_weight

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/card_top_holder" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:orientation="horizontal"> 

    <TextView 
     android:id="@+id/card_top_text" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="One Two Three Four Five" 
     android:textSize="40sp"/> 

    <ImageView 
     android:layout_width="24dp" 
     android:layout_height="24dp" 
     android:src="@drawable/ic_volume_up_black_48dp"/> 
</LinearLayout> 

Edit: Ein kleines Zitat aus der Dokumentation darüber, wie layout_weight arbeitet

Linearlayout unterstützt auch ein Gewicht auf einzelne Kinder zuweisen mit dem Attribut android: layout_weight. Dieses Attribut weist einer Ansicht einen "Wichtigkeitswert" zu, der angibt, wie viel Speicherplatz auf dem Bildschirm belegt werden soll. Mit einem größeren Gewichtungswert kann er erweitert werden, um den verbleibenden Platz in der übergeordneten Ansicht zu füllen. Untergeordnete Ansichten können einen Gewichtungswert angeben, und dann wird verbleibender Speicherplatz in der Ansichtsgruppe den Kindern im Verhältnis zu ihrem deklarierten Gewicht zugewiesen. Standardgewicht ist Null.

Wenn beispielsweise drei Textfelder angezeigt werden und zwei von ihnen ein Gewicht von 1 deklarieren, während das andere kein Gewicht erhält, wird das dritte Textfeld ohne Gewicht nicht wachsen und nur den von seinem Inhalt benötigten Bereich einnehmen . Die anderen beiden werden gleichmäßig expandieren, um den verbleibenden Raum zu füllen, nachdem alle drei Felder gemessen wurden. Wenn das dritte Feld dann eine Gewichtung von 2 (statt 0) erhält, wird es jetzt als wichtiger als die beiden anderen deklariert, sodass es die Hälfte des gesamten verbleibenden Speicherplatzes erhält, während die ersten beiden den Rest gleich teilen.

+0

ja scheint das den Trick zu tun. Haben Sie irgendwelche Erkenntnisse darüber, warum das Clipping aufgetreten ist und warum dies behoben wurde? –

Verwandte Themen