带有圆角的Listview项目

时间:2013-03-11 08:00:58

标签: android listview

我正在尝试将listview项目制成带有圆角的矩形形状,但是我发生了什么,只有第一行在上半部分带有圆角,其余的子列表视图项目都是矩形,没有圆角。我不知道为什么会这样。

这是我的listview代码:

<ListView
    android:id="@+id/listViewdoctorwithappointment"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="7dp"
    android:layout_marginRight="7dp"
    android:layout_marginTop="10dp"
    android:minHeight="80dp"
    android:background="@drawable/customshapeduplicate"
    android:cacheColorHint="@android:color/transparent"
    android:divider="#4F94CD"
    android:dividerHeight="10dp"

    android:smoothScrollbar="true"

    android:listSelector="@drawable/selector"
    android:scrollbars="none" >
</ListView>

这是我的customshapeduplicatefile是这样的:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient android:startColor="#ffffff" android:endColor="#ffffff" 
        android:angle="270"/> 

    <corners android:bottomRightRadius="10dp" android:bottomLeftRadius="10dp" 
        android:topLeftRadius="10dp" android:topRightRadius="10dp"/> 
</shape> 

这是图像:

enter image description here

3 个答案:

答案 0 :(得分:4)

我建议你使用自定义列表适配器。根据您的要求修改以下代码。

 public View getView(final int arg0, View arg1, ViewGroup arg2) {
    final ViewHolder vh;
    vh= new ViewHolder();

    if(arg1==null )
    {
                    arg1=mInflater.inflate(R.layout.lyourcustomlayouttobe inflated, arg2,false);
            arg1.setTag(vh);
            }

    return arg1;
}

您的自定义布局

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="horizontal"
 android:cacheColorHint="#000000"
 android:background="@drawable/listviewbkg">
 //other items to be inlfated.
 </LinearLayout>

在资源下创建一个可绘制文件夹。将以下xml发布为listviewbkg

 <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_pressed="true" 
    android:drawable="@drawable/pressed" />
 <item  android:state_focused="false" 
    android:drawable="@drawable/normal" />
 </selector>

在drawable下使用名称normal.xml时的正常形状

 <?xml version="1.0" encoding="UTF-8"?> 
 <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
 <solid android:color="#FFFFFF"/>    
 <stroke android:width="3dp"
        android:color="#0FECFF" /><!-- #330000FF #ffffffff -->
 <gradient                               // remove the gradient if do not wish to use.
    android:startColor="#ffffffff" 
    android:endColor="#110000FF" 
    android:angle="90"/> 

 <padding android:left="5dp"
         android:top="5dp"
         android:right="5dp"
         android:bottom="5dp"/> 
 <corners android:bottomRightRadius="7dp"      // change this to increase the rounded edge radius
         android:bottomLeftRadius="7dp" 
         android:topLeftRadius="7dp"
         android:topRightRadius="7dp"/> 
 </shape>

在drawable文件夹中名为pressed.xml的情况下按下时的形状

  <?xml version="1.0" encoding="UTF-8"?> 
  <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
  <solid android:color="#FF1A47"/>    
  <stroke android:width="3dp"
        android:color="#0FECFF"/>
  <padding android:left="5dp"
         android:top="5dp"
         android:right="5dp"
         android:bottom="5dp"/> 
  <corners android:bottomRightRadius="7dp"
         android:bottomLeftRadius="7dp" 
         android:topLeftRadius="7dp"
         android:topRightRadius="7dp"/> 
  </shape>

答案 1 :(得分:3)

设置背景不是为listview而是用custom layout来显示listview行

android:background="@drawable/customshapeduplicate"

答案 2 :(得分:0)

这是因为background - 属性是整个列表的背景,而不是单个行。

要实现您的目标,请通过Adapter或列表项布局设置自定义背景,或查看this答案。