Các trang phải điền vào toàn bộ ViewPager2 (sử dụng match_parent)


11

Tôi có bố cục vật phẩm nơi tôi hiển thị hình ảnh, tên sản phẩm và hình ảnh sản phẩm. Tôi phải hiển thị hình ảnh theo tỷ lệ 1: 1,5 bằng cách sử dụng bố cục ràng buộc. Nhưng khi tôi tải một hình ảnh nhỏ, bên dưới văn bản không hiển thị.

Dưới đây là mã mục XML của tôi: -

<?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. Đầu ra với hình ảnh dài: - https://i.imgur.com/QVnljX6.png
  2. Đầu ra với hình ảnh nhỏ: - https://i.imgur.com/0ZwkVwE.png

Và nếu tôi thay thế match_parent bằng Wra_content, ứng dụng gặp sự cố với lỗi bên dưới: -

java.lang.IllegalStateException: Các trang phải điền toàn bộ ViewPager2 (sử dụng match_parent)


Nếu bạn muốn thay đổi chiều cao trang, chỉ cần thay đổi chiều cao của chế độ xem.
dùng3783123

@Mahesh Tôi đang có vấn đề tương tự. Bạn đã tìm ra giải pháp?
androidStud

@androidStud chưa
Mahesh Babariya

@MaheshBabariya Xem phản hồi của tôi dưới đây.
androidStud

Phải, đặt nó thành match_parent và nếu bạn muốn thu nhỏ nó, hãy thử thực hiện trong chế độ xem hoặc với chính máy nhắn tin chế độ xem.
Tobias Reich

Câu trả lời:


10

Tôi đã phát hiện ra rằng vấn đề là ở người xem tăng cao.

Tôi đã có cùng một vấn đề và giải quyết nó thay đổi

ViewBinding.inflate(inflater)

đến

ViewBinding.inflate(inflater, parent, false)

1
Đây không phải là câu trả lời, viewPagger2 luôn yêu cầu bố trí mục để phù hợp với chiều cao và chiều rộng của cha mẹ. sửa lỗi contrainstlayout.
Indra As Lesmana

5

Trong khi vật lộn với vấn đề này, tôi đã tìm ra vấn đề là gì. Trường hợp sử dụng của tôi là tôi đang sử dụng androidx.viewpager2.widget.ViewPager2 và gọi Chế độ xem bình thường trong RecyclerView.

Nếu bạn nhận thấy lỗi một cách cẩn thận, bạn sẽ thấy một cái gì đó như thế này:

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

Dòng thứ hai là chìa khóa cho vấn đề chính. Nếu bạn mở ViewPager2.java, bạn sẽ thấy

 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 không lấy match_parent được gán trong xml để đính kèm lượt xem. Có thể những cải tiến trong tương lai sẽ được thực hiện trong phiên bản tiếp theo của ViewPager2.

Dù sao, bây giờ để khắc phục nó, hãy đặt tham số bố cục làm tính khám phá MATCH_PARENT.

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

Khung nhìn này là khung nhìn cha mẹ đang giữ các con View Pager.

Trong trường hợp của bạn, nó sẽ là androidx.constraintlayout.widget.ConstraintLayout.

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

Đã giải quyết bằng cách sử dụng view.setLayoutParams (new linearLayout.LayoutParams (Viewgroup.LayoutParams.MATCH_PARENT, Viewgroup.LayoutParams.MATCH_PARENT));
Vishal Kottarathil

1

Đối với tôi, vấn đề là các trang (tức là bố cục gốc / bố cục của bộ điều hợp) trong ViewPager2 không khớp với nhau do đó lỗi là java.lang.IllegalStateException: Pages must fill the whole ViewPager2 (use match_parent)


1

Tôi đã đối mặt với cùng một vấn đề bây giờ, chiều rộng và chiều cao của bộ điều hợp của bạn phải là match_parent


0

Tôi đã từng gặp vấn đề tương tự. Tôi đã sử dụng ViewPager2 để hiển thị thanh trượt. Nhưng mục XML của nó không phải là MATCH_PARENT. Sau đó, vấn đề đã được giải quyết.


0

mục viewpager2 nên có chiều rộng và chiều cao match_parent. nhưng NẾU bạn đang sử dụng View Binding, bạn nên tăng bố cục, chẳng hạn như các đoạn:

ViewBinding.inflate(inflater, parent, false)

0

Tôi cũng gặp phải vấn đề tương tự và giải pháp là đặt chiều cao là match_parent của chế độ xem mục của bạn, tức là bố cục được sử dụng trong lớp bộ điều hợp phải có chiều cao là MATCH_PARENT

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.