首页 > 解决方案 > CardView 在不同的屏幕密度下无法正确显示?

问题描述

我有一个带有 Cardviews 的 ViewPager,cardviews 可以在某些设备上正确显示,但在大多数情况下显示很薄。ViewPager 位于片段中。

我正在使用 LinearLayout 来定义 CardView,我尝试了相对但我有同样的问题。

https://ibb.co/kyNF5Yz “来自不同设备的示例”

Item.xml https://gist.github.com/Bryan9797/1eda5e7d02d1a12140115a539f164e3e

Fragment_bateria.xml https://gist.github.com/Bryan9797/b5d7b16a6d0599b7fd7f593226a4523d

activity_main.xml https://gist.github.com/Bryan9797/632461d73286afa5493167048b8e19c0

我希望在不同的设备上正确显示 Cardview。

标签: javaandroidxmlcardview

解决方案


您可以使用 sdp 库为所有设备提供响应式 XML。

https://github.com/intuit/sdp
您可以在 gradle 中安装此依赖项,并使用此 sdp 而不是 dp。您可以在 xml 布局中设置此 sdp 并将高度设置为 wrap_content,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical">
    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/_5sdp"
        app:cardCornerRadius="@dimen/_20sdp">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <ImageView
                android:id="@+id/image"
                android:layout_width="match_parent"
                android:layout_height="@dimen/_350sdp"
                android:scaleType="centerCrop"
                android:src="@color/colorAccent" />
            <TextView
                android:id="@+id/title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/image"
                android:layout_marginLeft="@dimen/_15sdp"
                android:layout_marginTop="10dp"
                android:text="Escritorio ejecutivo"
                android:textColor="#262626"
                android:textSize="@dimen/_20ssp" />
            <TextView
                android:id="@+id/desc"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/title"
                android:layout_marginLeft="@dimen/_15sdp"
                android:layout_marginTop="@dimen/_3sdp"
                android:layout_marginRight="@dimen/_15sdp"
                android:drawablePadding="@dimen/_10sdp"
                android:ellipsize="end"
                android:maxLines="4"
                android:text="Escritorio ejecutivo"
                android:textSize="@dimen/_15ssp" />
        </RelativeLayout>
    </androidx.cardview.widget.CardView>
</LinearLayout>

推荐阅读