手机
当前位置:查字典教程网 >编程开发 >安卓软件开发 >Android实现为ListView同时设置点击时的背景和点击松手之后的背景
Android实现为ListView同时设置点击时的背景和点击松手之后的背景
摘要:本文实例讲述了Android实现为ListView同时设置点击时的背景和点击松手之后的背景。分享给大家供大家参考。具体分析如下:这里要达到的...

本文实例讲述了Android实现为ListView同时设置点击时的背景和点击松手之后的背景。分享给大家供大家参考。具体分析如下:

这里要达到的效果是,

(1)点击ListView的item时会有指定的背景,

(2)松手之后,刚才点击的item也会有指定的背景

实现(1)很简单:在xml中为ListView设置listSelector即可。

复制代码 代码如下:<ListView

android:id="@+id/pop_listview_left"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:scrollbars="none"

android:divider="@color/popup_left_bg"

android:dividerHeight="1dp"

android:listSelector="@color/popup_right_bg"

android:scrollingCache="false"

/>

实现(2)也很简单,在adapter中动态改变背景:

复制代码 代码如下:if (position == selectedPosition){

convertView.setBackgroundResource(R.color.left_selected);

}else{

convertView.setBackgroundResource(R.color.left_normal);

}

并且在该ListView的点击事件中及时更新selectedPosition:

复制代码 代码如下:leftLV.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

//更新背景色

FirstClassAdapter adapter = (FirstClassAdapter) (parent.getAdapter());

adapter.setSelectedPosition(position);

adapter.notifyDataSetChanged();

}

});

可是,问题出来了:设置了(2)之后,(1)的效果没了!!!

这是因为,在设置

复制代码 代码如下:convertView.setBackgroundResource(R.color.left_selected);

时,(1)中listSelector中指定的颜色会被覆盖。

解决方法有两种:

(一)

将convertView的一个纯色的背景改为一个selector,并设置其在点击时的颜色为透明(这样下面listSelector的颜色就露出来了)。以下是selector_left_normal.xml和selector_left_selected.xml.

复制代码 代码如下:<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_pressed="true"

android:drawable="@android:color/transparent"/>

<item android:state_pressed="false"

android:drawable="@color/popup_left_bg"/>

</selector>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_pressed="true"

android:drawable="@android:color/transparent"/>

<item android:state_pressed="false"

android:drawable="@color/popup_right_bg"/>

</selector>

然后将(2)中的代码改为:

复制代码 代码如下:if (position == selectedPosition){

convertView.setBackgroundResource(R.drawable.selector_left_selected);

}else{

convertView.setBackgroundResource(R.drawable.selector_left_normal);

}

(二)

参照(一),将ListView的listSelector属性去掉,并将其颜色复制到上面两个selector中替换transparent那个颜色。

也就是说,每次点击ListView的条目之后,设置背景色时,

(a)如果该条目现在是选中状态,则直接设为某一个颜色

(b)否则,将其颜色设置为一个selector,并在selector中分别指定点击和没有点击时的颜色。

问题圆满解决。

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

【Android实现为ListView同时设置点击时的背景和点击松手之后的背景】相关文章:

android实现获取正在运行的应用程序

基于Android SQLite的使用介绍

Android为ListView的Item设置不同的布局

Android中使用sax解析xml文件的方法

Android笔记之:在ScrollView中嵌套ListView的方法

Android双击退出Activity的类代码

Android中库项目的使用方法图文介绍

Android设置桌面背景图片的实现方法

Android实现歌曲播放时歌词同步显示具体思路

Android获取SD卡中选中图片的路径(URL)示例

精品推荐
分类导航