Sayfalar ViewPager2'nin tamamını doldurmalıdır (match_parent kullanın)


11

Bir resmi, ürün adını ve ürün resmini görüntülediğim bir öğe düzenim var. Kısıtlama düzeni kullanarak görüntüyü 1: 1.5 oranında görüntülemeliyim. Ama küçük bir resim yüklediğimde, metinlerin altında görüntülenmiyor.

XML öğemin kodunu aşağıda görebilirsiniz: -

<?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>
  1. Uzun resimli çıktı: - https://i.imgur.com/QVnljX6.png
  2. Küçük resimli çıktı: - https://i.imgur.com/0ZwkVwE.png

Eğer match_parent'ı wrap_content ile değiştirirsem, uygulama aşağıdaki hata ile kilitlenir: -

java.lang.IllegalStateException: Sayfalar ViewPager2'nin tamamını doldurmalıdır (match_parent kullanın)


Sayfa yüksekliğini değiştirmek istiyorsanız, görünüm sayfalarının yüksekliğini değiştirmeniz yeterlidir.
user3783123

@ Mahesh Ben de aynı sorunu yaşıyorum. Çözümü buldunuz mu?
androidStud

@androidStud henüz değil
Mahesh Babariya

@MaheshBabariya Aşağıdaki yanıtı görün.
androidStud

Evet, match_parent olarak ayarlayın ve küçültmek istiyorsanız, görünümün içinde veya görünüm çağrı cihazının kendisinde yapmayı deneyin.
Tobias Reich

Yanıtlar:


10

Sorunun görüş sahibini şişirmekte olduğunu öğrendim.

Aynı sorunu yaşadım ve değiştirerek çözdüm

ViewBinding.inflate(inflater)

için

ViewBinding.inflate(inflater, parent, false)

1
bu cevap değil, viewPagger2 her zaman üst öğe yüksekliğini ve genişliğini eşleştirmek için gerekli öğe düzenini gerektirir. düzeltmeyi düzelt.
Indra As Lesmana

5

Bu sorunla uğraşırken sorunun ne olduğunu anladım. Benim kullanım durumum androidx.viewpager2.widget.ViewPager2 kullanmak ve RecyclerView normal Views çağırmak oldu.

Hatayı dikkatlice fark ederseniz böyle bir şey görürsünüz:

 java.lang.IllegalStateException: Pages must fill the whole ViewPager2 (use match_parent)
    at androidx.viewpager2.widget.ViewPager2$2.onChildViewAttachedToWindow(ViewPager2.java:170)

İkinci satır ana sorunun anahtarıdır. ViewPager2.java'yı açarsanız,

 private RecyclerView.OnChildAttachStateChangeListener enforceChildFillListener() {
    return new RecyclerView.OnChildAttachStateChangeListener() {
        @Override
        public void onChildViewAttachedToWindow(@NonNull View view) {
            RecyclerView.LayoutParams layoutParams =
                    (RecyclerView.LayoutParams) view.getLayoutParams();
            if (layoutParams.width != LayoutParams.MATCH_PARENT
                    || layoutParams.height != LayoutParams.MATCH_PARENT) {
                throw new IllegalStateException(
                        "Pages must fill the whole ViewPager2 (use match_parent)");
            }
        }

        @Override
        public void onChildViewDetachedFromWindow(@NonNull View view) {
            // nothing
        }
    };
}

Android, görünüm eklemek için xml'de atanan match_parent'u almıyor. Gelecekte ViewPager2'nin yeni sürümünde iyileştirmeler yapılacaktır.

Her neyse, şimdilik düzeltmek için, düzen parametrelerini MATCH_PARENT açıklığı olarak ayarlayın.

 view.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

Bu görünüm, Çağrı Cihazı Gösterme alt öğelerini tutan üst görünümdür.

Bu durumda androidx.constraintlayout.widget.ConstraintLayout olur.

 view.setLayoutParams(new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

Bu view.setLayoutParams (yeni LinearLayout.LayoutParams (ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)) kullanılarak çözüldü;
Vishal Kottarathil

1

Benim için sorun ViewPager2'deki sayfalar (yani bağdaştırıcının üst / kök düzeni) ile eşleşmiyordu, bu nedenle hata java.lang.IllegalStateException: Pages must fill the whole ViewPager2 (use match_parent)


1

şimdi aynı problemle karşılaştım, adaptör öğenizin genişliği ve yüksekliği match_parent olmalı


0

Ben de aynı problemi yaşadım. Kaydırıcıyı görüntülemek için ViewPager2'yi kullandım. Ancak XML öğesi MATCH_PARENT değildi. Bu değişiklikten sonra sorun çözüldü.


0

viewpager2 öğesinin match_parent genişliği ve yüksekliği olmalıdır. ancak View Binding kullanıyorsanız fragman gibi düzeni şişirmeniz gerekir:

ViewBinding.inflate(inflater, parent, false)

0

Aynı sorunla da karşılaştım ve çözüm, öğeyi görünümünüzün match_parent olarak ayarlamaktır, yani adaptör sınıfında kullanılan düzen MATCH_PARENT olarak yüksekliğe sahip olmalıdır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.