이미지, 제품 이름 및 제품 이미지를 표시하는 항목 레이아웃이 있습니다. 구속 조건 레이아웃을 사용하여 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>
- 긴 이미지로 출력 : -https : //i.imgur.com/QVnljX6.png
- 작은 이미지로 출력 : -https : //i.imgur.com/0ZwkVwE.png
그리고 match_parent를 wrap_content로 바꾸면 앱이 아래 오류로 충돌합니다.
java.lang.IllegalStateException : 페이지가 전체 ViewPager2를 채워야합니다 (match_parent 사용).
답변
뷰 홀더를 팽창시키는 데 문제가 있음을 알았습니다.
나는 같은 문제를 겪고 변화를 해결했다.
ViewBinding.inflate(inflater)
에
ViewBinding.inflate(inflater, parent, false)
답변
이 문제로 고심하는 동안 문제가 무엇인지 알아 냈습니다. 내 유스 케이스는 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));
답변
나에게 문제는 ViewPager2의 페이지 (예 : 어댑터의 부모 / 루트 레이아웃)가 match_parent가 아니기 때문에 오류가 발생했습니다.
java.lang.IllegalStateException: Pages must fill the whole ViewPager2 (use match_parent)
답변
나는 지금 같은 문제에 직면했다. 어댑터 항목의 너비와 높이는 match_parent이어야한다.
답변
나는 같은 문제가 있었다. ViewPager2를 사용하여 슬라이더를 표시했습니다. 그러나 해당 XML 항목은 MATCH_PARENT가 아닙니다. 그 변경 후 문제가 해결되었습니다.
답변
viewpager2 항목은 match_parent 너비와 높이를 가져야합니다. 그러나 View Binding을 사용하는 경우 조각과 같은 레이아웃을 팽창시켜야합니다.
ViewBinding.inflate(inflater, parent, false)
답변
나는 또한 같은 문제에 직면했으며 해결책은 높이를 항목보기의 match_parent로 설정하는 것입니다. 즉 어댑터 클래스에서 사용되는 레이아웃의 높이는 MATCH_PARENT이어야합니다