listview 圆角_Android listview背景行样式:圆角,备用颜色

listview 圆角

在上一篇文章中我们没有考虑的一个方面是如何将样式或背景应用于Listview项(或行)。 我们可以按照自己喜欢的方式自定义ListView的外观,例如可以用作背景圆角替代颜色等。 到目前为止,我们只考虑了定制适配器,而没有考虑如何定制列表视图中每个项目的显示方式。

在本文中,我们要描述如何使用资源来自定义项目外观。 第一个示例将描述我们如何为列表视图内的每个项目创建圆角。 在第二个示例中,我们将展示如何改变背景色

带圆角的ListView

假设我们要为每个项目创建圆角。 我们该怎么做?…我们需要创建一些可绘制的资源并将其应用于每个项目。 如您所知,我们必须创建一个自定义适配器来实现此行为。 在本文中,我们不想花太多时间谈论适配器,因为我们在这里这里都对它们进行描述。

正如我们所说的,我们需要的第一件事是可绘制的资源。 您可能已经知道,这是Android的强大功能,因为它允许我们以XML样式创建几何图形。 我们必须指定一些信息来创建此图:

  • 边框大小和颜色
  • 背景颜色(本例中为纯色)
  • 角落

我们需要在res / drawable目录下创建一个文件XML。 我们将此文件称为rounded_corners.xml 。 该文件包含形状定义。 形状是由其他标签描述的几何图形:

  • stroke –形状的线条(witdh,color,dashWidth和dashGap)
  • 纯色 –填充形状的纯色
  • –半径等等

因此,rounded_corners.xml如下所示:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <solid android:color="#00FF00"/>

    <corners android:radius="5dp" />

    <padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp" />

    <stroke android:width="3dp" android:color="#00CC00"/>
</shape>

创建形状后,我们需要将其应用于项目。 为此,我们必须创建另一个XML文件来描述如何应用此形状。 在这种情况下,我们使用XML标签选择器来指定何时以及如何应用形状。 为了指定何时应用形状,我们使用status 。 我们指定在以下情况下应用此形状:

  • 状态=启用
  • 状态=已选择
  • 状态=按下

因此,我们的文件( listview_selector.xml )如下所示:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/rounded_corner" android:state_enabled="true"/>

    <item android:drawable="@drawable/rounded_corner" android:state_pressed="true"/>

    <item android:drawable="@drawable/rounded_corner" android:state_focused="true"/>

</selector>

现在我们已经定义了资源,我们只需要指定以这种方式在适配器中应用它:

public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    PlanetHolder holder = new PlanetHolder();

    // First let's verify the convertView is not null
    if (convertView == null) {
        // This a new view we inflate the new layout
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.row_layout, null);
        // Now we can fill the layout with the right values
        TextView tv = (TextView) v.findViewById(R.id.name);

        holder.planetNameView = tv;

        v.setTag(holder);

        v.setBackgroundResource(R.drawable.rounded_corner);
    }
    else 
        holder = (PlanetHolder) v.getTag();

    Planet p = planetList.get(position);
    holder.planetNameView.setText(p.getName());

    return v;
}

如果我们运行该应用程序,我们将:

具有替代颜色的ListView

如上文所述,如果要更改ListView中每一行的外观,我们只需更改资源即可自定义外观。

例如,我们可以假设我们要替换行颜色。 在这种情况下,我们需要为每个背景创建两个可绘制资源,如下所示:

even_row.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <solid android:color="#A0A0A0"/>

    <padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp" />

    <stroke android:width="1dp" android:color="#00CC00"/>
</shape>

odd_row.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <solid android:color="#F0F0F0"/>

    <padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp" />

    <stroke android:width="1dp" android:color="#00CC00"/>
</shape>

此外,我们需要两个使用可绘制资源的选择器,例如

listview_selector_even.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/even_row" android:state_enabled="true"/>

    <item android:drawable="@drawable/even_row" android:state_pressed="true"/>

    <item android:drawable="@drawable/even_row" android:state_focused="true"/>

</selector>

listview_selector_odd.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/odd_row" android:state_enabled="true"/>

    <item android:drawable="@drawable/odd_row" android:state_pressed="true"/>

    <item android:drawable="@drawable/odd_row" android:state_focused="true"/>

</selector>

最后,我们在自定义适配器中应用它们:

public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    PlanetHolder holder = new PlanetHolder();

    // First let's verify the convertView is not null
    if (convertView == null) {
        // This a new view we inflate the new layout
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.row_layout, null);
        // Now we can fill the layout with the right values
        TextView tv = (TextView) v.findViewById(R.id.name);

        holder.planetNameView = tv;

        v.setTag(holder);

        if ( position % 2 == 0)
          v.setBackgroundResource(R.drawable.listview_selector_even);
        else
            v.setBackgroundResource(R.drawable.listview_selector_odd);
    }
    else 
        holder = (PlanetHolder) v.getTag();

    Planet p = planetList.get(position);
    holder.planetNameView.setText(p.getName());

    return v;
}

运行我们拥有的应用程序:

源代码@ github

参考: Android listview背景行样式:圆角,由我们的JCG合作伙伴 Francesco Azzola在Surviving w / Android博客上提供的替代颜色

翻译自: https://www.javacodegeeks.com/2013/06/android-listview-background-row-style-rounded-corner-alternate-color.html

listview 圆角

  • 1
    点赞
  • 0
    评论
  • 2
    收藏
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值