android中listview的一些样式设置

   2016-10-13 0
核心提示:在 Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备一张图片然后指定属性 android:background=”@drawable/bg”,不过不要高兴地太早,当你这么做以后,发

在 Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备一张图片然后指定属性 android:background=”@drawable/bg”,不过不要高兴地太早,当你这么做以后,发现背景是变了,但是当你拖动,或者点击 list空白位置的时候发现ListItem都变成黑色的了,破坏了整体效果

这是为什么呢?

这个要从Listview的效果说起,默认的ListItem背景是透明的,而ListView的背景是固定不变的,所以在滚动条滚动的过程中如果实时地去将当前每个Item的显示内容跟背景进行混合运算,所以android系统为了优化这个过程用,就使用了一个叫做 android:cacheColorHint的属性,在黑色主题下默认的颜色值是#191919,所以就出现了刚才的画面,有一半是黑色的.

那怎么办呢?

如果你只是换背景的颜色的话,可以直接指定android:cacheColorHint为你所要的颜色,如果你是用图片做背景的话,那也只要将 android:cacheColorHint指定为透明(#00000000)就可以了,当然为了美化是要牺牲一些效率的。最后就不回出现上面所说的你不想要的结果了!

自定义ListView行间的分割线

在Android平台中系统控件提供了灵活的自定义选项,所有基于ListView或者说AbsListView实现的widget控件均可以通过下面的方法设置行间距的分割线,分割线可以自定义颜色、或图片。在ListView中我们使用属性   android:divider=”#FF0000″ 定义分隔符为红色,当然这里值可以指向一个drawable图片对象,如果使用了图片可能高度大于系统默认的像素,可以自己设置高度比如6个像素   android:dividerHeight=”6px” ,Android开发网提示当然在Java中ListView也有相关方法可以设置。

1)点击Item时无背景颜色变化

在xml文件中的ListView控件中加入如下属性:

android:listSelector=”@drawable/timer_list_selector”

在drawable中定义timer_list_selector的属性值

timer_list_selector.xml中定义如下:

<?xml version="1.0" encoding="utf-8"?>

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
         <item android:state_selected="true" android:drawable="<a href=http://www.tuicool.com/articles/"http://my.oschina.net/asia" target="_blank">@android :color/transparent" />
    

在values文件夹下的colors.xml中定义transparent如下:

<color name="transparent">#50000000</color>

2)设置Item之间无间隙

在xml文件中ListView控件中加入如下属性:

android:divider="#00000000"

或者在javaCode中如下定义:

listView.setDividerHeight(0);

3)自定义的BaseAdapter中调用notifyDataSetChanged()方法会重新调用BaseAdapter的getView()方法。

属性名称 描述
android:choiceMode 规定此ListView所使用的选择模式。缺省状态下,list没有选择模式。属性值必须设置为下列常量之一: none,值为0,表示无选择模式;singleChoice,值为1,表示最多可以有一项被选中;multipleChoice,值为2,表示可以多项被选中。可参看全局属性资源符号choiceMode。
android:divider 规定List项目之间用某个图形或颜色来分隔。可以用”@[+] [package:]type:name”或者”?[package:][type:]name”(主题属性)的形式来指向某个已有资源;也可以用”#rgb”,”#argb”,”#rrggbb”或者”#aarrggbb”的格式来表示某个颜色。可参看全局属性资源符号divider。
android:dividerHeight 分隔符的高度。若没有指明高度,则用此分隔符固有的高度。必须为带单位的浮点数,如”14.5sp”。可用的单位如px(pixel像素),dp(density-independent pixels 与密集度无关的像素), sp(scaled pixels based on preferred font size 基于字体大小的固定比例的像素), in (inches英寸), mm (millimeters毫米)。可以用”@[package:]type:name”或者”?[package:][type:]name”(主题属性)的格式来指向某个包含此类型值的资源。可参看全局属性资源符号dividerHeight。
android:entries 引用一个将使用在此ListView里的数组。若数组是固定的,使用此属性将比在程序中写入更为简单。必须以”@[+][package:]type:name”或者 ”?[package:][type:]name”的形式来指向某个资源。可参看全局属性资源符号entries。
android:footerDividersEnabled 设成flase时,此ListView将不会在页脚视图前画分隔符。此属性缺省值为true。属性值必须设置为true或false。可以用”@[package:]type:name”或者”?[package:][type:]name”(主题属性)的格式来指向某个包含此类型值的资源。可参看全局属性资源符号footerDividersEnabled。
android:headerDividersEnabled 设成flase时,此ListView将不会在页眉视图后画分隔符。此属性缺省值为true。属性值必须设置为true或false。可以用”@[package:]type:name”或者”?[package:][type:]name”(主题属性)的格式来指向某个包含此类型值的资源。可参看全局属性资源符号headerDividersEnabled。

用心的朋友应该会发现,listview中在设置了背景之后。会有些问题。

1.、listview在拖动的时候背景图片消失变成黑色背景。等到拖动完毕我们自己的背景图片才显示出来。

2 、listview的上边和下边有黑色的阴影。

3、lsitview的每一项之间需要设置一个图片做为间隔。

针对以上问题 在listview的xml文件中设置一下语句。

问题1 有如下代码结解决 android:scrollingCache=”false”

问题2 用如下代码解决:android:fadingEdge=”none”

问题3  用如下代码解决:  android:divider=”@drawable/list_driver”  其中  @drawable/list_driver 是一个图片资源

总体如下

<ListView
     android:id="@+id/myListView01"
     android:layout_width="fill_parent"
     android:layout_height="287dip"
     android:fadingEdge="none"
     android:divider="@drawable/list_driver"
     android:scrollingCache="false"
     android:background="@drawable/list">
</ListView>
 
标签: ListView
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • Android 自定义ListView adapter(zt)
    Android 自定义ListView adapter(zt)
    本文讲实现一个自定义列表的Android程序,程序将实现一个使用自定义的适配器(Adapter)绑定数据,通过contextView.setTag绑定数据有按钮的ListView。系统显示列表(ListView)时,首先会实例化一个适配器,本文将实例化一个自定义的适配器。实现自定义适配器
    12-01 ListView
  • Android ListView 优化之 getView 与 ViewHolder 是如何工作的?
    Android ListView 优化之 getView 与 ViewHolde
    Android中我们经常会用到ListView,然后ListView到底是如何通过ViewHolder去优化的?1.常见的适配器中利用ViewHolder去优化ListView的代码@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder viewHolder;if (conve
    11-07 ListView
  • listviewd优化---viewHolder的封装
    listviewd优化---viewHolder的封装
    android项目中如果使用listview控件,则在优化上我们一般使用viewHolder保证列表项的布局convertView可以被重用避免多次重新绘制。 一般方法中getView的写法@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder vie
    11-07 安卓开发
  • Android ListView优化之局部刷新(更新)(非notifyDataSetChanged)
    Android ListView优化之局部刷新(更新)(非no
    在Android开发中我们经常会用到listview的数据和界面刷新动作,我们每次可能会用到的都是Adapter.notifyDataSetChanged()方法。这个方法的原理是利用观察者模式对我们的数据源进行监听,当我们的数据源发生变化的时候,会调用Adapter的getView()方法进行整个
    11-04 ListView
  • 基础篇章:关于 React Native 之 ListView 组件的讲解
    基础篇章:关于 React Native 之 ListView 组件
    我们讲完ScrollView组件,其实顺其自然的就应该讲解ListView,对于前段和移动端的开发人员应该非常熟悉这样的控件吧,具体是做什么的,我感觉不用我讲了吧。我们来看看它怎么使用吧。大家好,我是ListView,我是React Native大家族中基础组件中,一个核心组件
  • Android ListView 使用不同对象加载不同布局
    Android ListView 使用不同对象加载不同布局
    因为未知原因,突然想到了关于一个 List 集合里面能否添加不同对象的问题,因为我们平时开发过程中,关于List 的比较常规的写法就是:ListXXX list = new ArrayListXXX();这让我形成了一种 List 里面就只能添加一种类型的对象的潜在想法(或许是 Java 基础不
    10-31 ListView
  • Android应用性能优化系列视图篇——ListView自适应导致的严重性能问题
    Android应用性能优化系列视图篇——ListView自
    ListView是Android中最常用的视图之一,使用的频率仅仅次于三大基础布局,虽然由于使用性和扩展性等原因备受争议,且尽管后来出现了RecyclerView的替代方案,但是ListView仍然广泛地使用在我们的项目中。自从ListView出道至今,已经不知道衍生出了多少问题,
  • React Native填坑之旅--ListView篇
    列表显示数据,基本什么应用都是必须。笔者写作的时候RN版本是0.34。今天就来从浅到深的看看React Native的ListView怎么使用。首先是使用写死的数据,之后会使用网络请求的数据在界面中显示。最后加上一个ActivityIndicator,网络请求的过程中显示Loading图标
  • RecyclerView、ListView 实现单选列表的优雅之路.
    RecyclerView、ListView 实现单选列表的优雅之
    一 概述: 这篇文章需求来源还是比较简单的,但做的 优雅 仍有值得挖掘的地方。 需求来源:一个类似饿了么这种 电商优惠券的选择界面 : 其实就是 一个普通的列表,实现了 单选 功能,效果如图:(不要怪图渣了,我撸了四五遍,公司录出来的GIF就这么渣。。。
  • [原]判断Listview滑动到了最底部(且最后一个ite
    记录下代码:listView.setOnScrollListener(new AbsListView.OnScrollListener() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem, int visibleIte
    09-14 ListView
点击排行