Le pagine devono riempire l'intero ViewPager2 (usare match_parent)


11

Ho un layout dell'articolo in cui visualizzo un'immagine, il nome del prodotto e l'immagine del prodotto. Devo visualizzare l'immagine in rapporto 1: 1.5 usando il layout dei vincoli. Ma quando carico una piccola immagine, sotto i testi non vengono visualizzati.

Di seguito è riportato il mio codice dell'articolo 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>
  1. Uscita con immagine lunga: - https://i.imgur.com/QVnljX6.png
  2. Uscita con immagine piccola: - https://i.imgur.com/0ZwkVwE.png

E se sostituisco match_parent con wrap_content, l'app si arresta in modo anomalo con l'errore seguente: -

java.lang.IllegalStateException: le pagine devono riempire l'intero ViewPager2 (usare match_parent)


Se vuoi cambiare l'altezza della pagina, basta cambiare l'altezza dei viewpager.
user3783123,

@Mahesh Sto riscontrando lo stesso problema. Hai trovato la soluzione?
androidStud

@androidStud non ancora
Mahesh Babariya,

@MaheshBabariya Vedi la mia risposta qui sotto.
androidStud

Sì, impostalo su match_parent e se vuoi ridurlo, prova a farlo all'interno della vista o con il cercapersone della vista stessa.
Tobias Reich,

Risposte:


10

Ho scoperto che il problema è gonfiare il supporto della vista.

Ho avuto lo stesso problema e l'ho risolto cambiando

ViewBinding.inflate(inflater)

per

ViewBinding.inflate(inflater, parent, false)

1
questa non è la risposta, viewPagger2 ha sempre richiesto il layout dell'articolo in modo che corrispondesse all'altezza e alla larghezza del genitore. risolvere il controinstlayout.
Indra As Lesmana,

5

Mentre lottavo con questo problema, ho capito qual era il problema. Il mio caso d'uso era che stavo usando androidx.viewpager2.widget.ViewPager2 e che chiamavo Visualizzazioni normali in RecyclerView.

Se noti attentamente l'errore, vedresti qualcosa del genere:

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

La seconda riga è la chiave del problema principale. Se aprissi ViewPager2.java vedresti

 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 non utilizza match_parent assegnato in xml per allegare visualizzazioni. Potrebbero esserci miglioramenti futuri nella prossima versione di ViewPager2.

Ad ogni modo, per ora per risolverlo, imposta i parametri di layout come esplicita MATCH_PARENT.

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

Questa vista è la vista padre che contiene Visualizza figlio cercapersone.

Nel tuo caso sarebbe androidx.constraintlayout.widget.ConstraintLayout.

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

Risolto usando questo view.setLayoutParams (nuovo LinearLayout.LayoutParams (ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
Vishal Kottarathil,

1

Per me, il problema erano le pagine (ovvero il layout principale / principale dell'adattatore) in ViewPager2 non erano match_parent quindi l'errore era java.lang.IllegalStateException: Pages must fill the whole ViewPager2 (use match_parent)


1

ho riscontrato lo stesso problema ora, la larghezza e l'altezza dell'articolo dell'adattatore devono essere match_parent


0

Ho avuto lo stesso problema. Ho usato ViewPager2 per visualizzare il dispositivo di scorrimento. Ma il suo elemento XML non era MATCH_PARENT. Dopo tale modifica il problema è stato risolto.


0

L'elemento viewpager2 dovrebbe avere larghezza e altezza match_parent. ma SE stai usando Visualizza rilegatura devi gonfiare il layout come frammenti:

ViewBinding.inflate(inflater, parent, false)

0

Ho anche affrontato lo stesso problema e la soluzione è impostare l'altezza come match_parent della vista oggetto, ovvero il layout utilizzato nella classe dell'adattatore deve avere altezza MATCH_PARENT

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.