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

Android 在MaterialCardView的中心设置自定义图标,android,material-design,android-cardview,material-components,material-components-android,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_margi

我无法在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>

点击:

但是我需要把我的自定义图标放在CardView的中心。 Smt是这样的:

我将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>

尝试使用与此类似的

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_checked_gray_24dp" android:state_selected="true"/>
    <item android:drawable="@drawable/ic_checked_gray_24dp" android:state_pressed="true"/>
    <item android:drawable="@drawable/ic_checked_gray_24dp" android:state_checked="true"/>
    <item android:drawable="@drawable/ic_checked_white_32dp"/>
</selector>

简而言之,使用组件提供的标准
checkedIcon
是无法实现的。您必须在
内添加可绘图/视图

使用版本
1.1.0
1.2.1
,您可以

  • 使用app:checkedIcon属性定义自定义图标
  • 使用
    app:checkedEntint
    属性为图标定义颜色选择器
使用
1.3.0-alpha03
还可以定义:

  • app:checkedEdiconSize
    :图标的大小(默认值
    24dp
  • app:checkedEdiconMargin
    :图标的边距(默认值
    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>
    
        <!-- Size of the icon to be placed when the card is checked -->
        <dimen name="mtrl_card_checked_icon_size">xxdp</dimen>
    

试试
app:checkendeconmargin

<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:checkedIconMargin="10dp"

    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

</com.google.android.material.card.MaterialCardView>


这是我的解决方案。这是定制MaterialCardView的正确方法吗?非常感谢,@Gabriele。我在这个问题上花了几个小时,你的回答帮助了我。我甚至在Github上写了一份错误报告。谢谢@Gabriele。自定义大小是我想要的。这应该出现在按钮的公共API上。不幸的是,这是一个漏洞我们最好有自动取款机。
<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:checkedIconMargin="10dp"

    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

</com.google.android.material.card.MaterialCardView>