페이지는 전체 ViewPager2를 채워야합니다 (match_parent 사용).


11

이미지, 제품 이름 및 제품 이미지를 표시하는 항목 레이아웃이 있습니다. 구속 조건 레이아웃을 사용하여 1 : 1.5 배급으로 이미지를 표시해야합니다. 그러나 작은 이미지를로드하면 텍스트 아래에 표시되지 않습니다.

아래는 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. 긴 이미지로 출력 : -https : //i.imgur.com/QVnljX6.png
  2. 작은 이미지로 출력 : -https : //i.imgur.com/0ZwkVwE.png

그리고 match_parent를 wrap_content로 바꾸면 앱이 아래 오류로 충돌합니다.

java.lang.IllegalStateException : 페이지가 전체 ViewPager2를 채워야합니다 (match_parent 사용).


페이지 높이를 변경하려면 viewpagers 높이 만 변경하십시오.
user3783123

@Mahesh 나는 같은 문제가 있습니다. 해결책을 찾았습니까?
androidStud

@androidStud 아직
Mahesh Babariya

@MaheshBabariya 아래 내 답변을 참조하십시오.
androidStud

예, match_parent로 설정하고 축소하려면 뷰 내부 또는 뷰 호출기 자체에서 시도하십시오.
Tobias Reich

답변:


10

뷰 홀더를 팽창시키는 데 문제가 있음을 알았습니다.

나는 같은 문제를 겪고 변화를 해결했다.

ViewBinding.inflate(inflater)

ViewBinding.inflate(inflater, parent, false)

1
이것은 답이 아닙니다. viewPagger2는 항상 부모 높이와 너비에 맞는 항목 레이아웃이 필요했습니다. 금기 사항을 수정하십시오.
Indra As Lesmana

5

이 문제로 고심하는 동안 문제가 무엇인지 알아 냈습니다. 내 유스 케이스는 androidx.viewpager2.widget.ViewPager2를 사용하고 RecyclerView에서 일반 뷰를 호출하는 것이 었습니다.

오류를주의 깊게 발견하면 다음과 같이 보일 것입니다.

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

두 번째 줄은 주요 이슈의 열쇠입니다. ViewPager2.java를 열면

 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는 xml에 지정된 match_parent를 사용하여 뷰를 첨부하지 않습니다. 다음 ViewViewr2 릴리스에서 향후 개선 될 수 있습니다.

어쨌든 지금은 수정하기 위해 레이아웃 매개 변수를 MATCH_PARENT 명시 적으로 설정하십시오.

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

이보기는 View Pager 하위를 보유하는 상위보기입니다.

당신의 경우 androidx.constraintlayout.widget.ConstraintLayout입니다.

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

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

1

나에게 문제는 ViewPager2의 페이지 (예 : 어댑터의 부모 / 루트 레이아웃)가 match_parent가 아니기 때문에 오류가 발생했습니다. java.lang.IllegalStateException: Pages must fill the whole ViewPager2 (use match_parent)


1

나는 지금 같은 문제에 직면했다. 어댑터 항목의 너비와 높이는 match_parent이어야한다.


0

나는 같은 문제가 있었다. ViewPager2를 사용하여 슬라이더를 표시했습니다. 그러나 해당 XML 항목은 MATCH_PARENT가 아닙니다. 그 변경 후 문제가 해결되었습니다.


0

viewpager2 항목은 match_parent 너비와 높이를 가져야합니다. 그러나 View Binding을 사용하는 경우 조각과 같은 레이아웃을 팽창시켜야합니다.

ViewBinding.inflate(inflater, parent, false)

0

나는 또한 같은 문제에 직면했으며 해결책은 높이를 항목보기의 match_parent로 설정하는 것입니다. 즉 어댑터 클래스에서 사용되는 레이아웃의 높이는 MATCH_PARENT이어야합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.