Android败笔之ListView设置分割线颜色

使用下面代码设置分隔线颜色,无效,竟然看不到分割线了,即使设置分割线宽度为100,也看不到,从这两行代码看,应该没什么问题吧,也是很常规的写法。

        listView.setDividerHeight(1);
        listView.setDivider(new ColorDrawable(Color.GRAY));

为什么无效呢?看看setDivider的源码

    public void setDivider(Drawable divider) {
        if (divider != null) {
            mDividerHeight = divider.getIntrinsicHeight();
        } else {
            mDividerHeight = 0;
        }
        mDivider = divider;
        mDividerIsOpaque = divider == null || divider.getOpacity() == PixelFormat.OPAQUE;
        requestLayout();
        invalidate();
    }

看到 下面代码了吗

        if (divider != null) {
            mDividerHeight = divider.getIntrinsicHeight();

如果参数不为空,要获取一个内部默认的高度,这个高度是多少呢,看下面代码

    public int getIntrinsicHeight() {
        return -1;
    }

高度返回-1,要能看到线才见鬼了!

从源代码看,只要调用了ListView的setDivider接口,mDividerHeight就会被置为0或-1,所以你根本看不到线,如果想看到线,就要把调用顺序反过来,如下

        listView.setDivider(new ColorDrawable(Color.GRAY));
        listView.setDividerHeight(1);

在此,不评论其源代码如何,只是个人认为这样的逻辑实在不妥,设置颜色不应该将 已经设置好的基本参数修改掉。

时间: 2024-11-05 18:47:11

Android败笔之ListView设置分割线颜色的相关文章

Android下用程序的方法为ListView设置分割线Divider样式

使用XML的时候可以使用android:divider属性为ListView设置分割线的样式(颜色或者资源文件),而在Java代码中默认提供的方法 listView.setDivider() 却只支持Drawable资源文件,为此费了一点时间想解决方法,后来才发现其实很简单,android提供创建颜色资源文件的方法,于是只需要用 listView.setDivider(new ColorDrawable(color)) 就可以解决问题了. 如果设置完Divider没有效果的话,设置divider

Android给ListView设置分割线Divider样式

给ListView设置分割线,只需设置如下两个属性: android:divider="#000" //设置分割线显示颜色 android:dividerHeight="1px" //此处非0,否则无效 <ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="fill_paren

Android NumberPicker控件修改分割线颜色及字体颜色大小

(1)重写NumberPicker已达到修改显示字体颜色大小 public class TextColorNumberPicker extends NumberPicker { public TextColorNumberPicker(Context context) { super(context); } public TextColorNumberPicker(Context context, AttributeSet attrs) { super(context, attrs); } pu

android错误之ListView设置setOnItemClickListener失效

检查一下你的listView中item的view中有没有checkBox控件,如果有这个控件,事件会被子View捕获到,ListView无法捕获处理该事件,导致失效 解决方法如下: <CheckBox android:id="@+id/comment_item_user_sex" style="@style/TextTheme" android:focusable="false" android:gravity="center&q

去掉listview的分割线和分割线的颜色,高度的设置

listview中每个Item项之间都有分割线,去掉这条分割线可以有两种方法: 1.在代码中设置:setDriver(null) 2.或者在布局文件中设置:android:divider="@null" 改变ListView的分割线颜色和宽度,需要在布局中定义android:divider 和android:dividerHeight属性: <ListView android:id="@+id/listview" android:layout_width=&q

ListView属性及divider设置分割线

给ListView设置分割线,只需设置如下两个属性: android:divider="#000" //设置分割线显示颜色 android:dividerHeight="1px" //此处非0,否则无效 <ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="fill_paren

Android 中关于ListView分割线的设置

今天发现许多App上的listview的item之间的分割线都只显示了右边一部分,而左边的那一半则没有,第一反应则是给分割线设置一张背景图片就ok了: android:divider="@mipmap/line" 然而,后来网上找找资料后发现,可以自己去定义一个drawable,将其设置为listview的分割线(divider) 效果图: 1.drawable下的listview_item_divider: 1 <?xml version="1.0" enc

ListView中分割线的设置

1.在布局文件中ListView元素中通过属性设置 android:divider="#fffff" 分割线颜色 android:dividerHeight="1px" 分割线高度 2.使用XML文件设置 <!-- res/drawable/liner.xml -> <?xmlversionxmlversion="1.0"encoding="utf-8"?> <layer-list xmlns:a

[Android Pro] android控件ListView顶部或者底部也显示分割线

reference to  :  http://blog.csdn.net/lovexieyuan520/article/details/50846569 在默认的Android控件ListView在顶部是不显示分割线的,但是我们可以使用一些技巧来显示.我们先来看下默认情况下ListView显示的效果: 可以看到顶部是没有分割线的,但是有时候我们的美工硬是在上面画了一条分割线,没办法,我们也得加上,我们在ListView顶部加上一个Header就可以实现,代码如下 listView.addHea