19

我有一个 Android ListView 的自定义单元格。这个自定义单元格是一个相对布局,里面有一些视图。每个单元格之间都有一个空间,所以我想在单元格的底部添加一个阴影。

我一直在谷歌搜索,但找不到任何东西?我想实现类似的东西:

在此处输入图像描述

谢谢!

4

5 回答 5

46

可以通过以下两种方式完成:

  1. 9 补丁图像 - 单击链接了解 9 补丁
  2. 使用图层列表 - 在“res/drawable”中创建新文件,其中包含:

     <?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="@android:color/darker_gray" />
                  <corners android:radius="5dp"/>
            </shape>
         </item>
         <item android:right="1dp" android:left="1dp" android:bottom="2dp">
            <shape 
              android:shape="rectangle">
                  <solid android:color="@android:color/white"/>
                  <corners android:radius="5dp"/>
            </shape>
         </item>
       </layer-list>
    

然后将此图层列表文件添加为列表项布局中的背景(即,线性布局等)。

于 2013-05-01T16:06:35.723 回答
2

最简单的方法肯定是将阴影构建成 9-patch。这样的例子是:

框 9-补丁

这比它需要的大得多,作为一个 9 补丁,但我想让它更大,例如为了。

于 2013-05-01T03:58:58.227 回答
2

我将此图层列表应用为列表项布局中的背景,所选颜色已禁用...。

    <?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="@android:color/darker_gray" />
              <corners android:radius="5dp"/>
        </shape>
     </item>
     <item android:right="1dp" android:left="1dp" android:bottom="2dp">
        <shape 
          android:shape="rectangle">
              <solid android:color="@android:color/white"/>
              <corners android:radius="5dp"/>
        </shape>
     </item>
   </layer-list>
于 2013-06-25T14:28:55.167 回答
1

我尚未测试您的确切方案,但这是您将透明分隔线添加到列表视图的方式:

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">

  <ListView 
    android:id="@+id/android:list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:divider="@android:color/transparent"
    android:dividerHeight="4dip"/>

</LinearLayout>

如果您想以编程方式添加阴影线,这就是您需要的。

<?xml version="1.0" encoding="utf-8"?>  
<shape xmlns:android="http://schemas.android.com/apk/res/android"  
    android:shape="rectangle">  
    <solid android:color="@android:color/transparent" />  
    <stroke   
        android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip"
        android:width="match_content"   
        android:color="@color/black"  />  
    <size android:height="1dp" />
</shape>

描边的颜色可能不会显示为黑色,因为它是在 Alpha 层之上渲染的。另外,这目前绘制矩形的四个边,而不仅仅是底边。(我将不得不对这两个问题做一些进一步的研究)。

如果您需要帮助确定如何将它们连接在一起,请参阅本教程。

于 2013-05-01T04:19:29.193 回答
1

创建一个从下方突出的图层列表矩形,并在其 xml 中设置单元格视图自己的主要背景颜色。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <!--shadow to bottom and right-->
    <!--by pushing offset from top and left-->
    <!--then set foreground-color in android:background in xml-->
    <item
        android:left="2dp"
        android:right="0dp"
        android:top="2dp"
        android:bottom="0dp">
        <shape
            android:shape="rectangle">
            <solid android:color="@android:color/darker_gray" />
        </shape>
    </item>
</layer-list>

in your cell.xml:

<RelativeLayout
    android:layout_width="match_content"
    android:layout_height="wrap_content"
    android:background="@drawable/shadow">

    <RelativeLayout 
        android:id="@+id/cell_stuff"
        android:layout_width="match_content"
        android:layout_height="match_content"
        android:background="@android:color/holo_orange_light">

        <!--cell stuff-->

    </RelativeLayout>

</RelativeLayout>

或多合一

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <!--shadow to bottom and right-->
    <!--by pushing offset from top and left-->
    <item
        android:left="2dp"
        android:right="0dp"
        android:top="2dp"
        android:bottom="0dp">
        <shape
            android:shape="rectangle">
            <solid android:color="@android:color/darker_gray" />
        </shape>
    </item>
    <!--foreground-color to cover over non-shadow-->
    <!--need to also offset in opposite direction-->
    <item
        android:left="0dp"
        android:right="2dp"
        android:top="0dp"
        android:bottom="2dp">
        <shape
            android:shape="rectangle">
            <solid android:color="@android:color/holo_orange_light"/>
        </shape>
    </item>
</layer-list>

in your cell.xml:

<RelativeLayout
    android:layout_width="match_content"
    android:layout_height="wrap_content"
    android:background="@drawable/shadow_allinone">

    <!--cell stuff-->

</RelativeLayout>

在此处输入图像描述

于 2016-08-03T18:30:40.467 回答