Вкратце:
Как мы можем определить состояния цвета свойства CardView cardBackgroundColor (в данном случае в макете ListView)?
(Я использую RC1 предварительного просмотра разработчика Android L на телефоне с установленным 4.4 и "com.android.support:cardview-v7:21.0.0-rc1" в build.gradle)
дольше:
В макете CardView мы устанавливаем радиус угла и цвет фона CardView через cardCornerRadius и cardBackgroundColor.
Однако цвет фона не отражает выбранные состояния, например, если элемент списка нажат, например.
Если во внутреннем виде CardView вы задаете цвет фона и ассоциированные состояния, которые соблюдаются, однако, он будет отображаться по углам, определенным вами в CardView.
Итак, как мы можем обеспечить соответствие состояний в CardView cardBackgroundColor?
Здесь цвет, используемый для cardBackgroundColor, colour_with_states.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_enabled="false" android:state_pressed="true" android:color="@android:color/holo_green_dark" />
<item android:state_focused="true" android:state_enabled="false" android:color="@android:color/holo_green_dark" />
<item android:state_focused="true" android:state_pressed="true" android:color="@android:color/holo_green_dark" />
<item android:state_focused="false" android:state_pressed="true" android:color="@android:color/holo_green_dark" />
<item android:state_focused="true" android:color="@android:color/holo_green_dark" />
<!-- Only this below is seen in the cardview dispaly -->
<item android:color="@android:color/holo_blue_bright" />
</selector>
И макет, который использует CardView:
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:cardview="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
cardview:cardCornerRadius="10dp"
cardview:cardBackgroundColor="@color/colour_with_states"
>
<!-- If we set a background color below, it will overwrite our radius defined above -->
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:text="Lorem ipsum"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItem"
android:background="@null"
android:gravity="center_vertical"
android:paddingTop="8dip"
android:paddingBottom="8dip"
android:paddingStart="8dip"
android:paddingEnd="8dip"
/>
</android.support.v7.widget.CardView>