Mam układ produktu, w którym wyświetlam obraz, nazwę produktu i obraz produktu. Muszę wyświetlać obraz w proporcji 1: 1,5 przy użyciu układu ograniczeń. Ale kiedy ładuję mały obrazek, poniżej tekstów się nie wyświetla.
Poniżej znajduje się mój kod pozycji XML: -
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/coordinatorLayoutCartRoot"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.jackandphantom.circularimageview.RoundedImage
android:id="@+id/imageViewSlider"
android:layout_width="match_parent"
android:layout_height="0dp"
android:scaleType="centerCrop"
app:layout_constraintBottom_toTopOf="@id/tvTitle"
app:layout_constraintDimensionRatio="WH,1:1.4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:rounded_radius="0"
tools:src="@tools:sample/avatars" />
<TextView
android:id="@+id/tvTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="4dp"
android:text="Fitted crew neck sweater"
android:textColor="@color/colorBlack"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/imageViewSlider" />
<TextView
android:id="@+id/tvPrice"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="4dp"
android:text="$34.00"
android:textColor="@color/colorBlack"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvTitle" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
- Dane wyjściowe z długim obrazem: - https://i.imgur.com/QVnljX6.png
- Wyjście z małym obrazem: - https://i.imgur.com/0ZwkVwE.png
A jeśli zamienię match_parent na wrap_content, aplikacja zawiesza się z poniższym błędem: -
java.lang.IllegalStateException: Strony muszą wypełnić cały ViewPager2 (użyj match_parent)
android
android-viewpager2
Mahesh Babariya
źródło
źródło
Odpowiedzi:
Dowiedziałem się, że problemem jest napompowanie uchwytu widoku.
Miałem ten sam problem i rozwiązałem go zmieniając
do
źródło
Walcząc z tym problemem, zorientowałem się, na czym polega problem. Mój przypadek użycia polegał na tym, że korzystałem z androidx.viewpager2.widget.ViewPager2 i wywoływałem normalne widoki w RecyclerView.
Jeśli zauważysz błąd ostrożnie, zobaczysz coś takiego:
Druga linia jest kluczem do głównego problemu. Jeśli otworzysz ViewPager2.java, zobaczysz
Android nie pobiera elementu match_parent przypisanego w pliku XML do dołączania widoków. Być może przyszłe ulepszenia zostaną wprowadzone w następnej wersji ViewPager2.
W każdym razie, na razie, aby to naprawić, ustaw parametry układu jako objaśnienie MATCH_PARENT.
Ten widok jest widokiem nadrzędnym zawierającym Wyświetl potomka Pager.
W twoim przypadku będzie to androidx.constraintlayout.widget.ConstraintLayout.
źródło
Dla mnie problem polegał na tym, że strony (tj. Układ nadrzędny / główny adaptera) w ViewPager2 nie były match_parent, dlatego błąd był
java.lang.IllegalStateException: Pages must fill the whole ViewPager2 (use match_parent)
źródło
napotkałem ten sam problem, szerokość i wysokość elementu adaptera musi być zgodna z rodzicem
źródło
Miałem ten sam problem. Użyłem ViewPager2, aby wyświetlić suwak. Ale jego element XML nie był MATCH_PARENT. Po tej zmianie problem został rozwiązany.
źródło
element viewpager2 powinien mieć szerokość i wysokość match_parent. ale JEŻELI korzystasz z funkcji Powiązanie widoku, powinieneś napompować układ, taki jak fragmenty:
źródło
Wystąpił również ten sam problem, a rozwiązaniem jest ustawienie wysokości jako match_parent widoku elementu, tzn. Układ użyty w klasie adaptera musi mieć wysokość jako MATCH_PARENT
źródło