Android-L CardView Визуальная Сенсорная Обратная Связь
может ли кто-нибудь объяснить мне, как реализовать некоторые из визуальных сенсорных отзывов, которые были продемонстрированы на Google I/O 2014 в CardView.
вот как я использую CardView в XML, вероятно, есть что-то маленькое, что мне не хватает, поэтому я просто подумал, Может ли кто-нибудь мне помочь?.
<!-- A CardView -->
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/CardView_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
card_view:cardCornerRadius="4dp"
android:elevation="2dp">
<LinearLayout
android:id="@+id/LinearLayout_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:onClick="RunSomeMethod"">
<!-- Main CardView Content In Here-->
</LinearLayout> </android.support.v7.widget.CardView>
4 ответов:
API 11+:
добавить
android:foreground="?android:attr/selectableItemBackground"наCardViewэлемент.API 9+:
добавить
android:foreground="?selectableItemBackground"наCardViewэлемент.
Edit: пульсация, исходящая из центра, а не из точки касания, является известная ошибка и была исправлена.
чтобы сделать выбор на pre-Lollipop и пост-леденец правильно, вы можете использовать следующий подход (идея заключается в использовании вставка drawable селектора с округлый углы для pre-Lollipop-образец ниже использует пользовательские цвета, вы можете изменить их на по умолчанию):
android:foreground="@drawable/card_foreground"пост-леденец
drawable-v21 / card_foreground.xml
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#20000000" android:drawable="@drawable/card_foreground_selector" />drawable-v21 / card_foreground_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="rectangle"> <solid android:color="#18000000"/> </shape> </item> <item android:state_focused="true" android:state_enabled="true"> <shape android:shape="rectangle"> <solid android:color="#0f000000"/> </shape> </item> </selector>pre-Lollipop
drawable / card_foreground.xml (вам нужно будет настроить значения вставки в соответствии с высотой вашей карты)
<inset xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/card_foreground_selector" android:insetLeft="2dp" android:insetRight="2dp" android:insetTop="4dp" android:insetBottom="4dp"/>drawable / card_foreground_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="rectangle"> <solid android:color="#18000000"/> <corners android:radius="@dimen/card_radius" /> </shape> </item> <item android:state_focused="true" android:state_enabled="true"> <shape android:shape="rectangle"> <solid android:color="#0f000000"/> <corners android:radius="@dimen/card_radius" /> </shape> </item> </selector>
это помогло в моем случае
Справочная информация:
The
CardViewигнорироватьandroid:backgroundв пользуapp:cardBackgroundкоторый может быть только цвет. Граница и тень на самом деле являются частью фона, поэтому вы не можете установить свой собственный.устранение:
сделать макет внутри
CardViewкликабельный вместо самой карты. Вы уже написали оба атрибута, необходимые для этого макет:android:clickable="true" android:background="?android:selectableItemBackground"
вот мое решение. Он использует пульсацию для lollipop+ и статический передний план для устройств pre-lollipop.
<android.support.v7.widget.CardView ... android:foreground="?android:attr/selectableItemBackground">
Comments