Расширение MaterialCardView не применяет темы - PullRequest
1 голос
/ 19 февраля 2020

В соответствии со спецификацией материала https://material.io/develop/android/components/material-card-view/ colorSurface применяется к цвету фона карты.

Это работает, когда мы указываем карту в нашем xml, как это

<com.google.android.material.card.MaterialCardView
    android:layout_width="100dp"
    android:layout_height="100dp"></com.google.android.material.card.MaterialCardView>

Когда я запускаю это, я вижу правильное применение цветовой поверхности к вышеуказанной карте.

Это также работает, если я делаю карту программным способом

addView(MaterialCardView(this).apply {
        layoutParams = ViewGroup.LayoutParams(300,300)
    })

Однако, как только я расширяюсь из MaterialCardView, чтобы создать свой собственный пользовательский вид, создается впечатление, что соединение с темой потеряно. Цветовая поверхность не применяется, вместо карты по умолчанию используется белый цвет

class CustomView @JvmOverloads constructor(
    context: Context?,
    attributeSet: AttributeSet? = null,
    defStyleAttr: Int = 0
) : MaterialCardView(context, attributeSet, defStyleAttr){

}


<com.seed.formviewactivity.CustomView
        android:layout_width="100dp"
        android:layout_height="100dp"></com.seed.formviewactivity.CustomView>

Мой пользовательский вид теперь не имеет примененного colorSurface.

Это известная проблема?

1 Ответ

0 голосов
/ 20 февраля 2020

В вашем конструкторе вы используете defStyleAttr: Int = 0.
. Вы должны применить R.attr.materialCardViewStyle в качестве значения по умолчанию вместо 0.

Таким образом, ваш пользовательский CardView будет использовать стиль, определенный в теме вашего приложения атрибутом materialCardViewStyle.

Значение по умолчанию, предоставляемое библиотекой компонентов материалов:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
  <!-- ... -->
  <item name="materialCardViewStyle">@style/Widget.MaterialComponents.CardView</item>
</style>
...