CardView 默认高程值
Posted
技术标签:
【中文标题】CardView 默认高程值【英文标题】:CardView default elevation value 【发布时间】:2020-06-21 04:20:29 【问题描述】:我正在尝试在我的 CardView 上显示一个徽章(粉红色 TextView),如下所示:
CardView的elevation值没有设置,所以应该是默认的,badge的elevation设置为2dp
。
API Level > 22
没有问题,但API Level <= 22
的徽章如下所示停留在 CardView 下:
当我将徽章的高度值从 2dp
更改为 2.285738dp
时,它就可以工作了。
我最初的想法是 CardView 的默认高度值会根据 API 级别而变化。想在这里发帖以找出更合乎逻辑的原因。
<androidx.constraintlayout.widget.ConstraintLayout
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"
android:layout_
android:layout_
android:clipToPadding="false"
android:paddingBottom="8dp">
<androidx.cardview.widget.CardView
android:layout_
android:layout_
android:layout_marginStart="@dimen/margin_horizontal_default"
android:layout_marginTop="@dimen/margin_inner_half_default"
android:layout_marginEnd="@dimen/margin_horizontal_half_default"
android:foreground="?android:attr/selectableItemBackground"
app:cardBackgroundColor="?backgroundCardColor"
app:cardCornerRadius="@dimen/card_corner_radius"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_
android:layout_>
<ImageView
android:id="@+id/accountImage"
android:layout_
android:layout_
android:layout_marginStart="@dimen/margin_inner_default"
android:src="@drawable/ic_account"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_
android:layout_
android:layout_marginStart="8dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/accountImage"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/accountIdText"
style="@style/TextStyle.SemiBoldActiveMedium"
android:layout_
android:layout_
tools:text="12058.01" />
<TextView
android:id="@+id/accountTypeText"
style="@style/TextStyle.BoldSmallInactive"
android:layout_
android:layout_
android:layout_marginTop="2dp"
tools:text="Collection" />
</LinearLayout>
<TextView
android:id="@+id/tvAmountView"
style="@style/TextStyle.BoldPrime"
android:layout_
android:layout_
android:layout_marginEnd="4dp"
android:layout_marginBottom="1dp"
android:textSize="15sp"
app:layout_constraintBottom_toBottomOf="@id/ivChevron"
app:layout_constraintEnd_toStartOf="@+id/tvAmountCurrency"
app:layout_constraintTop_toTopOf="@id/ivChevron"
tools:text="13,592.04" />
<TextView
android:id="@+id/tvAmountCurrency"
style="@style/TextStyle.BoldSmallInactive"
android:layout_
android:layout_
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
app:layout_constraintBottom_toBottomOf="@id/ivChevron"
app:layout_constraintEnd_toStartOf="@id/ivChevron"
app:layout_constraintTop_toTopOf="@id/ivChevron"
tools:text="KES" />
<ImageView
android:id="@+id/ivChevron"
android:layout_
android:layout_
android:layout_marginEnd="@dimen/margin_inner_default"
android:src="@drawable/ic_chevron_right"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<TextView
android:id="@+id/accountCurrencyText"
style="@style/TextStyle.InvertedTag"
android:layout_
android:layout_
android:layout_marginStart="@dimen/margin_horizontal_half_default"
android:background="@drawable/background_inverted_secondary"
android:elevation="2dp"
android:gravity="center_vertical"
android:paddingStart="12dp"
android:paddingEnd="12dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="KES" />
【问题讨论】:
【参考方案1】:请尝试用androidx.TextView
替换您的TextView
,看看是否有效。
【讨论】:
这会在 LayoutInflater 中自动发生,您绝对不必在 xml 文件中使用 androidx TextViews 或 ImageViews。 不幸的是,替换为 androidx 并没有改变行为。 你的style="@style/TextStyle.InvertedTag"
和android:foreground="?android:attr/selectableItemBackground"
是做什么的?
您的TextView
是CardView
布局的一部分吗?我假设在您的CardView
中,您拥有所有这些带有图像、文本等的视图。我会为CardView
设置一些填充/边距,可能在FrameLayout
或ConstraintLayout
中设置CardView
,然后在层次结构中CardView
下方的徽章,以便它始终显示在CardView
的顶部。
更改为 AppCompatTextView 不起作用,但从 androidx.cardview.widget.CardView
更改为 com.google.android.material.card.MaterialCardView
确实:)【参考方案2】:
我之前遇到过这个问题,并通过为两个项目设置elevation
来解决它,在后台,我设置2sp
,在前台设置4sp
。它工作得很好。
CardView
的默认值为 2dp
。
【讨论】:
似乎对于 Api Level 2dp,因为徽章仅以高度2.285738dp
出现在前台。以上是关于CardView 默认高程值的主要内容,如果未能解决你的问题,请参考以下文章