如何圆角查看listview及其子项如溢出:隐藏?

时间:2015-03-30 17:44:42

标签: android listview android-listview hidden rounded-corners

我遇到了ListView我正在使用的问题。

我已经定义了一个带圆角的ListView。这个ListView有一个标题和几个项目。每个子视图都有自己的background定义(只有颜色 - 标题为紫色,其他项为白色)。

ListViewbackground来定义圆角。

问题是标题和其他子项的background位于background的{​​{1}}之上。因此,我看不到ListView的圆角形状。

我正在寻找一种模仿CSS的ListView属性的方法,以便将项目和标题保留在overflow:hidden的圆角下。

有解决方法吗?

2 个答案:

答案 0 :(得分:1)

尝试使用android:padding="..."在ListView元素上添加一些填充,但如果列表行具有不同的背景(或渐变背景),则项目与列表边框之间会出现一些颜色差异。

或者,您可以尝试在第一个列表行的顶角和最后一个列表行的底角使用边框半径。您可以在覆盖列表Adapter类的getView(...)方法时设置正确的后台可绘制xml资源。

<强>实施例。 first_row_bg.xml(第一行):

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
        <gradient
            android:angle="90"
            android:startColor="#b3b3b3"
            android:endColor="#f5f5f5" />
        <corners android:topLeftRadius="12dp"
                 android:topRightRadius="12dp"/>
    </shape>

<强>实施例。 last_row_bg.xml(最后一行):

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
        <gradient
            android:angle="90"
            android:startColor="#b3b3b3"
            android:endColor="#f5f5f5" />
        <corners android:bottomLeftRadius="12dp"
                 android:bottomRightRadius="12dp"/>
    </shape>

<强>实施例。 border_radius_bg.xml(如果列表只有一行):

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
        <gradient
            android:angle="90"
            android:startColor="#b3b3b3"
            android:endColor="#f5f5f5" />
        <corners android:radius="12dp"/>
    </shape>

<强>实施例。 gradient_bg.xml(对于中间的行):

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
        <gradient
            android:angle="90"
            android:startColor="#b3b3b3"
            android:endColor="#f5f5f5" />
    </shape>

getView(...)实施示例

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        //inflate the layout (if necessary) and set the row content.
        ....

        if(data.length==1) { // if we have only one row
            convertView.setBackgroundResource(R.drawable.border_radius_bg); 
        } else if(position==0) { // first row
            convertView.setBackgroundResource(R.drawable.first_row_bg); 
        } else if(position==data.length-1) { // last row
            convertView.setBackgroundResource(R.drawable.last_row_bg);  
        } else { // row in the middle
            convertView.setBackgroundResource(R.drawable.gradient_bg);  
        }
        return convertView;
    }

显然,.xml文件应该保存在&#34; drawable&#34; 。目录

答案 1 :(得分:0)

为什么不将listview放在另一个布局中,并向父级提供带圆角的背景资源?

<LinearLayout ...
    android:background="@drawable/rounded_corners.xml" />