在 MaterialCardView 的中心设置自定义图标

a_s*_*ber 3 android material-design android-cardview material-components material-components-android

我无法在 MaterialCardView 的中心设置自定义图标。这是我的 xml 布局

<androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/cardPaymentContainer"
    android:layout_width="0dp"
    android:layout_height="200dp"
    android:layout_margin="@dimen/default_margin"
    android:layout_marginStart="@dimen/button_margin"
    android:layout_marginEnd="@dimen/button_margin"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/toolBarContainer">

    <com.google.android.material.card.MaterialCardView
        android:id="@+id/cardPaymentCardView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:checkable="true"
        android:clickable="true"
        android:focusable="true"
        app:cardCornerRadius="@dimen/card_view_cornder_radius"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
    </com.google.android.material.card.MaterialCardView>

</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

处理点击活动:

dataBinding =
            DataBindingUtil.setContentView<PaymentActivityBinding>(this, R.layout.payment_activity)
        dataBinding.setHandler(this)
        dataBinding.cardPaymentCardView.setOnClickListener({
            Debug.d(TAG, "cardPaymentCardView: onClick")
            dataBinding.cardPaymentCardView.isChecked = !dataBinding.cardPaymentCardView.isChecked
        })
Run Code Online (Sandbox Code Playgroud)

这里的结果:

未点击:

在此处输入图片说明

并点击:

在此处输入图片说明

但我需要将我的自定义图标放在 CardView 的中心。像这样:

在此处输入图片说明

我将 SVG 转换为 xml(通过 Android Studio)

我试试这个,但图标没有显示,也没有显示在cardView的中心:

 <com.google.android.material.card.MaterialCardView
                android:id="@+id/cardPaymentCardView"
                style="@style/cardViewStyle"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:checkable="true"
                android:clickable="true"
                android:focusable="true"
                app:cardCornerRadius="@dimen/card_view_cornder_radius"
                app:checkedIcon="@drawable/ic_credit_card_outline_select"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent">

            </com.google.android.material.card.MaterialCardView>
Run Code Online (Sandbox Code Playgroud)

Gab*_*tti 6

简而言之,您无法使用checkedIcon组件提供的标准来实现它。您必须在Card.

使用这些版本1.1.0您可以1.2.1

  • 使用app:checkedIcon属性定义自定义图标
  • 为具有app:checkedIconTint属性的图标定义颜色选择器

盯着1.3.0-alpha03你还可以定义:

  • app:checkedIconSize:图标的大小(默认24dp
  • app:checkedIconMargin:图标的边距(默认8dp

要在 1.2.x 和 1.1.0 版本中实现相同的行为,您可以执行以下操作((但我建议您避免这种解决方法):

  • 覆盖被选中的图标使用的边距添加到dimens.xml

        <!-- Margin between the checked icon and the card -->
        <dimen name="mtrl_card_checked_icon_margin">xxdp</dimen>
    
    Run Code Online (Sandbox Code Playgroud)
  • 覆盖被选中的图标使用的大小,添加到dimens.xml

        <!-- Size of the icon to be placed when the card is checked -->
        <dimen name="mtrl_card_checked_icon_size">xxdp</dimen>
    
    Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明