Установить пользовательский значок в центре MaterialCardView - PullRequest
0 голосов
/ 31 октября 2019

Я не могу установить пользовательский значок в центре 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>

обрабатывать клик по активности:

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
        })

Вот результат:

Не кликнул:

enter image description here

И щелкнул:

enter image description here

Но мне нужно поместить свой пользовательский значок в центр CardView. Смт так:

enter image description here

Я конвертировал SVG в XML (от Android Studio)

Я пытаюсь это сделать, но значок не отображается ине показывать в ЦЕНТРЕ картыВид:

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

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Короче говоря, вы не можете достичь этого с помощью стандарта checkedIcon, предоставляемого компонентом. Вы должны добавить drawable / view внутри Card.

В настоящее время (версии 1.1.0-beta01 и 1.2.0-alpha01) вы можете :

  • определить пользовательский значок с атрибутом app:checkedIcon
  • определить цветовой селектор для значка с атрибутом app:checkedIconTint

Также (но я рекомендую вам избегать такого родакода) вы можете:

  • переопределить поля, используемые отмеченным значком, добавив в dimens.xml:

      <!-- Margin between the checked icon and the card -->
      <dimen name="mtrl_card_checked_icon_margin">xxdp</dimen>
    
  • переопределениеразмер, используемый отмеченным значком при добавлении в dimens.xml:

      <!-- Size of the icon to be placed when the card is checked -->
      <dimen name="mtrl_card_checked_icon_size">xxdp</dimen>
    

enter image description here

0 голосов
/ 31 октября 2019

попробуйте использовать <selector> аналог к ​​этому:

<?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>
...