CardView 스타일 Drawable
21 Jan 2017 | Android UX안드로이드 L(롤리팝) 부터 CardView라는 UX 컴포넌트가 추가되었습니다. 하지만 여기서는 그 이전 버전에서도 사용할 수 있도록 CardView와 유사한 형태의 Drawable를 만들어보고자 합니다.
먼저 drawable 폴더에 각 xml 파일들을 작성합니다.
layer_card_background.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <shape android:shape="rectangle">
      <solid android:color="#CABBBBBB" />
      <corners android:radius="2dp" />
    </shape>
  </item>
  <item
    android:bottom="2dp"
    android:left="0dp"
    android:right="0dp"
    android:top="0dp">
    <shape android:shape="rectangle">
      <solid android:color="@android:color/white" />
      <corners android:radius="2dp" />
    </shape>
  </item>
</layer-list>
layer_card_background_selected.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <shape android:shape="rectangle">
      <solid android:color="#CABBBBBB" />
      <corners android:radius="2dp" />
    </shape>
  </item>
  <item
    android:bottom="2dp"
    android:left="0dp"
    android:right="0dp"
    android:top="0dp">
    <shape android:shape="rectangle">
      <solid android:color="#CCCCCC" />
      <corners android:radius="2dp" />
    </shape>
  </item>
</layer-list>
selector_card_background.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item
    android:drawable="@drawable/layer_card_background_selected"
    android:state_pressed="true" />
  <item android:drawable="@drawable/layer_card_background" />
</selector>
ListView
<ListView android:cacheColorHint="@android:color/transparent" android:divider="@null" android:dividerHeight="10dp" android:footerDividersEnabled="true" android:headerDividersEnabled="true" android:id="@+id/listview" android:layout_above="@id/layout_bottom_buttons" android:layout_height="match_parent" android:layout_width="match_parent" android:listSelector="@android:color/transparent" />
각 Item들을 출력하는 View
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/layout_background"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingLeft="15dp"
  android:paddingRight="15dp"
  android:descendantFocusability="beforeDescendants">
  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="15dp"
    android:paddingBottom="15dp"
    android:paddingLeft="15dp"
    android:paddingRight="15dp"
    android:background="@drawable/selector_card_background"
    android:descendantFocusability="afterDescendants"
    android:orientation="horizontal">
    <ImageView
      android:layout_width="64dp"
      android:layout_height="64dp"
      android:layout_gravity="center_vertical"
      android:src="@drawable/footprint" />
    <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_marginLeft="15dp"
      android:orientation="vertical">
      <TextView
        android:id="@+id/tv_date"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="2016-11-02 13:30:30"
        android:textColor="@color/darkgray"
        android:textSize="14sp" />
      <TextView
        android:id="@+id/tv_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Beacon1 : 35"
        android:textColor="@color/black"
        android:textSize="12sp" />
    </LinearLayout>
  </LinearLayout>
</FrameLayout>
  