我有一个Android ListView的自定义单元格。此自定义单元格是一个相对布局,其中包含一些视图。每个单元格之间有一个空格,所以我想在单元格的底部添加一个阴影。
我一直在谷歌上搜索但找不到任何东西?我想实现与此类似的东西:
谢谢!
答案 0 :(得分:43)
可以通过以下两种方式完成:
使用layer-list - 在“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>
然后在List项目布局中添加此图层列表文件作为背景(即,Linearlayout等等。)。
答案 1 :(得分:2)
最简单的方法是将阴影构建成9补丁。这样的例子是:
这比它需要的更大,作为一个9补丁,但我想让它更大,例如为了。
答案 2 :(得分: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>
答案 3 :(得分: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图层的顶部呈现。此外,这目前绘制矩形的四边,而不仅仅是底边。 (我将不得不对这两个问题做进一步的研究。)
如果您需要帮助确定如何将它们连接在一起,请参阅此tutorial。
答案 4 :(得分: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>
OR all-in-one
<?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>