AndroidListView的item背景色设置和item点击无响应的解决方法
2023-06-13 09:15:07 时间
下面讲解以下在使用listview时最常见的几个问题。
1.如何改变item的背景色和按下颜色
listview默认情况下,item的背景色是黑色,在用户点击时是黄色的。如果需要修改为自定义的背景颜色,一般情况下有三种方法:
1)设置listSelector
2)在布局文件中设置item的background
3)在adapter的getview中设置
这三种方法都能达到改变item默认的背景色和按下颜色,下面来分别讲解,但是在这之前需要先写好selector.xml文件;
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<itemandroid:state_pressed="true"android:drawable="@color/light_blue"></item>
<itemandroid:state_pressed="false"android:drawable="@color/sgray"></item>
</selector>
在改变button或者listview的item默认背景色,就可以用到selector。drawable可以设置为色彩资源,也可以设置为图片资源。
1)设置listview的listSelector
<ListView
android:id="@+id/history_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="#565C5D"
android:dividerHeight="3dp"
android:listSelector="@drawable/selector"
android:cacheColorHint="@android:color/transparent">
</ListView>
2)在listitem的布局文件中设置background属性,下面是listitem的布局文件
<?xmlversion="1.0"encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/selector">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="历史记录"
android:textColor="#ffffff"
android:textSize="20sp"
android:layout_centerInParent="true">
</TextView>
</RelativeLayout>
3)在adapter的getView方法中设置
if(convertView==null)
{
convertView=LayoutInflater.from(context).inflate(R.layout.listitem,null);
}
convertView.setBackgroundResource(R.drawable.selector);
上述方法都能达到同样的效果,就是改变item默认的背景色和点击时的背景颜色,第三种方法最灵活,如果listview的奇数行和偶数行需要设置为不同的selector,只能用第三种方法。
2.包含button,checkbox等控件时点击无响应问题。
如果listitem里面包括button或者checkbox等控件,默认情况下listitem会失去焦点,导致无法响应item的事件,最常用的解决办法是在listitem的布局文件中设置descendantFocusability属性。
<?xmlversion="1.0"encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:descendantFocusability="blocksDescendants">
<CheckBox
android:id="@+id/history_item_checkbt"
android:layout_height="30dp"
android:layout_width="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:checked="false"
>
</CheckBox>
<ImageView
android:id="@+id/history_item_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/history_item_checkbt"
android:background="@drawable/item_icon">
</ImageView>
<Button
android:id="@+id/history_item_edit_bt"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="编辑"
android:textColor="#ffffff"
android:textSize="14sp"
android:background="@drawable/button_bg">
</Button>
<TextView
android:id="@+id/history_item_time_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:textColor="#565C5D"
android:textSize="14sp"
android:text="10-0110:20"
android:layout_marginRight="5dp"
android:layout_toLeftOf="@id/history_item_edit_bt">
</TextView>
<TextView
android:id="@+id/history_item_title_tv"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_centerVertical="true"
android:textColor="#565C5D"
android:textSize="14sp"
android:text="xxxxxxxxXXXXXXXXXXXXXXXX"
android:ellipsize="end"
android:maxLines="1"
android:layout_toRightOf="@id/history_item_image"
android:layout_toLeftOf="@id/history_item_time_tv"
android:layout_marginLeft="3dp">
</TextView>
</RelativeLayout>
相关文章
- Vue2剥丝抽茧-响应式系统之数组2
- 网络诊断dns服务器未响应,网络诊断提示DNS服务器未响应解决方法
- Linux应急响应笔记
- 【说站】HTTP服务响应数据不完整响应数据截断解决方法
- 【教程】Python requests库POST方式接收Stream类型的响应
- (一)virtual DOM 和 响应基础:proxy
- (四)定义响应式数据的第二种方法
- 如何带走一个“鲜活”的进程 | Linux 应急响应
- 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(10)-Charles如何修改请求参数和响应数据-下篇
- HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码详解编程语言
- JSP Response.setContentType()方法:设置响应对象的MIME类型
- Oracle 执行最佳实践:节省时间、加快响应(oracle执行方法)
- 困难解决Linux系统ping外网无响应问题(linuxping外网)
- Linux自动Ping测试:保证网络及时响应(linux自动ping)
- MySQL 无响应启动卡住解决方法(mysql启动没反应)
- 如何优化Oracle系统的响应时间?(oracle响应时间)
- MySQL下载遇到未响应情况怎么办解决方法分享(mysql下载时未响应)
- MySQL崩溃不响应尝试这些方法解决问题(mysql不响应)
- 缓存实现快速响应Redis请求级别缓存(redis 请求级别)
- phpmyadmin出现#2003服务器无响应解决方法小结
- IIS无法启动提示“服务没有及时响应启动或控制请求”的解决方法[图解]
- 解决C++中事件不响应的方法详解
- 深入理解C#实现快捷键(系统热键)响应的方法
- c#给button添加不规则的图片以及用pictureBox替代button响应点击事件的方法
- javasciprt下jquery函数$.post执行无响应的解决方法
- MFC中动态创建控件以及事件响应实现方法
- Js中使用hasOwnProperty方法检索ajax响应对象的例子