Android程序美化之自定义ListView背景的方法

本文实例讲述了Android程序美化之自定义ListView背景的方法。分享给大家供大家参考,具体如下:

在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="@android:color/transparent" /> </selector>

在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()方法。

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

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

问题1 有如下代码结解决

android:scrollingCache="false"

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

问题2 用如下代码解决:

android:fadingEdge="none"

3、lsitview的每一项之间需要设置一个图片做为间隔。
问题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>

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android视图View技巧总结》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android文件操作技巧汇总》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

时间: 2024-07-29 17:51:41

Android程序美化之自定义ListView背景的方法的相关文章

Android布局之LinearLayout自定义高亮背景的方法

本文实例讲述了Android布局之LinearLayout自定义高亮背景的方法.分享给大家供大家参考,具体如下: 首先创建linearlayout_background.xml文件 res/drawable/linearlayout_background.xml <?xml version="1.0" encoding="utf-8"?> <selectorxmlns:android="http://schemas.android.com

Android程序开发之自定义设置TabHost,TabWidget样式_Android

先看效果: 京东商城底部菜单栏 新浪微博底部菜单栏 本次学习效果图: 第一,主布局文件(启动页main.xml,位于res/layout目录下)代码 <?xml version="." encoding="utf-"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_paren

Android程序自动更新功能模块的实现方法【附完整demo源码下载】_Android

本文实例讲述了Android程序自动更新功能模块的实现方法.分享给大家供大家参考,具体如下: 在程序启动的时候检测服务器上有没有对应版本更新,如果有更新,提示用户是否更新. 在程序启动的时候首先调用更新模块检测服务器上存放的版本号跟当前程序的版本号如果大于当前版本号,弹出更新对话框,如果用户选择更新,则显示当前更新状态,然后替换当前程序. 程序调用版本更新检测: private UpdateManager updateMan; private ProgressDialog updateProgr

Android编程实现activity dialog透明背景的方法

本文实例讲述了Android编程实现activity dialog透明背景的方法.分享给大家供大家参考,具体如下: 首先查一下window  activity的关系 具体省略.... 我的理解就是 每个activity都有一个window 也就是view的最顶层容器 activity是提供给用户交互的一组View容器(window的child) 层次关系是 <window> <activity> </activity> </window> 所以说如果需要设置

Android编程实现左右滑动切换背景的方法

本文实例讲述了Android编程实现左右滑动切换背景的方法.分享给大家供大家参考,具体如下: 最近想做一个左右滑动切换背景图片的应用,特地将自己的研究分享一下: 这个需要继承2个监听接口 OnGestureListener,  OnTouchListener 关于这2个接口大家可以在网上查一下 同时需要设置2个属性 bgLayout.setOnTouchListener(this); bgLayout.setLongClickable(true); 并且在这个函数中有如下这几句话 public

退出Android程序时清除所有activity的实现方法_Android

本文实例讲述了退出Android程序时清除所有activity的方法.分享给大家供大家参考,具体如下: 在一个项目中,要退出android程序,试了restartPackage. killBackgroundProcesses .通过异常并在Application的子类中重新注册Thread的 Thread.UncaughtExceptionHandler接口+异常方式,等等,都没有效果. 最后发现其实只要在从一个activity A 跳到另一个activity B 时,调用了A的finish方

退出Android程序时清除所有activity的实现方法

本文实例讲述了退出Android程序时清除所有activity的方法.分享给大家供大家参考,具体如下: 在一个项目中,要退出android程序,试了restartPackage. killBackgroundProcesses .通过异常并在Application的子类中重新注册Thread的 Thread.UncaughtExceptionHandler接口+异常方式,等等,都没有效果. 最后发现其实只要在从一个activity A 跳到另一个activity B 时,调用了A的finish方

ListView中pointToPosition()方法使用详细示例

MainActivity如下: package cc.testpointtoposition; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener

Android自定义ListView实现仿QQ可拖拽列表功能_Android

我们大致的思路,其实是这样子的,也是我的设想,我们可以先去实现一个简单的ListView的数据,但是他的Adapter,我们可以用系统封装好的,然后传递进去一个实体类,最后自定义一个listview去操作,所以我们先把准备的工作做好,比如? list_item.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.a