Prozentsatz der maximalen Breite von ConstraintLayout
Lesezeit: 5 Minuten
Hyhage
Ich habe mit ConstraintLayout experimentiert. Gibt es eine Möglichkeit, die maximale Breite einer Ansicht auf einen Prozentsatz der übergeordneten Ansicht festzulegen (und ein Höhen-Match-Einschränkungs- und Dimensionsverhältnis von 1:1)?
Hier ist der Code ohne Verwendung der maximalen Breite:
Ich würde die Verwendung von PercentLayout jedoch lieber vermeiden, da es zugunsten von ConstraintLayout veraltet war.
– Hyhage
13. März 2018 um 12:19 Uhr
Dann können Sie verwenden LinearLayout
– Cagri Yalcin
13. März 2018 um 14:01 Uhr
Tut mir leid, wenn ich mich nicht ganz klar ausgedrückt habe, ich möchte eigentlich keine Prozentsätze für Breite/Höhe verwenden, ich möchte nur, dass die Ansicht durch einen Prozentsatz eingeschränkt wird. Wenn Sie einen Prozentsatz verwenden (anhand des Gewichts oder anhand einer Richtlinie), sieht es auf dem Telefon so aus: i.imgur.com/4fjmryf.png Das ist in Ordnung, aber nicht auf dem Tablet: i.imgur.com/27F39Lq.png . Die ImageView sollte nicht größer sein als das FrameLayout auf der rechten Seite.
– Hyhage
13. März 2018 um 14:45 Uhr
Thomson Varghese
Ich habe den maximalen Breitenprozentsatz mithilfe von zwei Attributen erreicht:
Die Textbreite wird auf 40 % der übergeordneten Textbreite erhöht und dann umbrochen, wenn der Inhalt diese Breite überschreitet.
@thomson-varghese, ich habe Ihre Antwort ausprobiert, aber ich habe kein korrektes Ergebnis erhalten. Vielleicht habe ich etwas falsch gemacht. Können Sie bitte meinen Code überprüfen und schreiben, wie man die maximale Breite als Prozentsatz des übergeordneten Elements festlegt, aber nur die „normale“ Breite sollte wie „wrap_content“ sein: 1) erste Variante wenn der Text zu lang ist und die Breite % vom übergeordneten Element sein sollte 2) zweite Variantewenn die Breite nicht so groß sein soll, jast wrap_content Mein Code
– Sergej Grischin
28. Juli 2019 um 15:42 Uhr
gut gemacht! Könnten Sie bitte erklären, was das bedeutet? layout_constraintWidth_max="wrap" eigentlich meinen?
– Mamavart
30. April 2020 um 11:42 Uhr
Funktioniert nicht, wenn eine solche Textansicht im vertikalen Fluss platziert wird und die Ansicht darüber und darunter verdeckt
– Michał Ziobro
15. Juni 2020 um 8:34
aber wenn der belegte Platz weniger als 0,4 Prozent beträgt, wird immer noch ein Mindestwert von 0,4 Prozent erreicht
– Benutzer924
21. Juli 2020 um 14:42 Uhr
Es wird kein Umbruch durchgeführt, wenn der Text aus mehreren Zeilen besteht
– David Ibrahim
19. Okt. 2020 um 7:08
Wenn ich Ihr Problem richtig verstehe, haben Sie es fast geschafft. Ich glaube, du gibst frameLayout Statische Höhe, deshalb liefert es auf dem Tablet nicht das richtige Ergebnis, weil Sie die Höhe entsprechend der Telefonvorschau eingestellt haben. Was Sie tun müssen, ist die Höhe festzulegen frameLayout relativ zu imageView.. also wann imageView wächst in der Größe frameLayout wächst auch mit.
Ich habe es überprüft und es ergibt das gleiche Ergebnis auf dem Telefon und dem Tablet. Korrigieren Sie mich, wenn ich Ihr Problem falsch verstanden habe.
Nein, da ist kein. Ich denke, wir sollten eine Funktionsanfrage stellen. Ich bin mir ziemlich sicher, dass PercentRelativeLayout diese Funktion ebenfalls nicht hat. (Diese Antwort gilt für ConstraintLayout 1.1)
Sie können eine festlegen LinearLayout oder andere ViewGroup als exakter Prozentsatz width und platzieren Sie Ihre wrap_content Blick in dieses Layout.
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/image_place_holder"
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="centerCrop"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- This LinearLayout will have exact 80% of parent width-->
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.8">
<!-- This MaterialCardView will get a wrap_content width,
with a max width of his parent LinearLayout, which is 80% -->
<com.google.android.material.card.MaterialCardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/half_activity_horizontal_margin"
android:layout_marginTop="@dimen/half_activity_vertical_margin"
android:layout_marginEnd="@dimen/half_activity_horizontal_margin"
android:layout_marginBottom="@dimen/half_activity_vertical_margin"
android:backgroundTint="?attr/colorPrimary">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:paddingStart="@dimen/half_activity_horizontal_margin"
android:paddingEnd="@dimen/half_activity_horizontal_margin"
android:text="Lorem ipsum"
android:textAppearance="?attr/textAppearanceCaption" />
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
14521300cookie-checkProzentsatz der maximalen Breite von ConstraintLayoutyes
Versuchen Das Verknüpfung.
– Cagri Yalcin
13. März 2018 um 11:50 Uhr
Ich würde die Verwendung von PercentLayout jedoch lieber vermeiden, da es zugunsten von ConstraintLayout veraltet war.
– Hyhage
13. März 2018 um 12:19 Uhr
Dann können Sie verwenden
LinearLayout
– Cagri Yalcin
13. März 2018 um 14:01 Uhr
Tut mir leid, wenn ich mich nicht ganz klar ausgedrückt habe, ich möchte eigentlich keine Prozentsätze für Breite/Höhe verwenden, ich möchte nur, dass die Ansicht durch einen Prozentsatz eingeschränkt wird. Wenn Sie einen Prozentsatz verwenden (anhand des Gewichts oder anhand einer Richtlinie), sieht es auf dem Telefon so aus: i.imgur.com/4fjmryf.png Das ist in Ordnung, aber nicht auf dem Tablet: i.imgur.com/27F39Lq.png . Die ImageView sollte nicht größer sein als das FrameLayout auf der rechten Seite.
– Hyhage
13. März 2018 um 14:45 Uhr