ListView中没有默认的选择颜色,只有选择Item后的焦点颜色,鼠标点击时Item有颜色,放开鼠标后颜色也就没有了,要实现放开鼠标后选择项的背景还是有颜色的。
1、配置main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView android:id="@+id/listView" android:listSelector="#000000"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
设置Item的获取焦点颜色为白色android:listSelector="#000000"(即不显示背景颜色)
2、配置用于ListView显示Item的button_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayoutButton"
android:layout_width="144px"
android:layout_height="99px"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/TextViewButton"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="20px">
</TextView>
</LinearLayout>
3、实现Activity
package com.listButtonTest.www;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
public class listButtonTest extends Activity {
private ListView listView = null;
private ListAdapter listAdapter = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) this.findViewById(R.id.listView);
ArrayList<ButtonView> buttonListView = new ArrayList<ButtonView>();
ButtonView a = new ButtonView(R.string.l1);
buttonListView.add(a);
ButtonView b = new ButtonView(R.string.l2);
buttonListView.add(b);
ButtonView c = new ButtonView(R.string.l3);
buttonListView.add(c);
ButtonView d = new ButtonView(R.string.l4);
buttonListView.add(d);
ButtonView e = new ButtonView(R.string.l5);
buttonListView.add(e);
listAdapter = new ListAdapter(buttonListView);
listView.setAdapter(listAdapter);
listView.setDividerHeight(0);
listView.setOnItemClickListener(new ListView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
listAdapter.setSelectedPosition(arg2);
listAdapter.notifyDataSetInvalidated();
}
});
};
public class ListAdapter extends BaseAdapter {
ArrayList<ButtonView> arrayList = null;
LayoutInflater inflater;
View view;
ButtonLayoutHolder buttonLayoutHolder;
LinearLayout buttonLayout = null;
TextView buttonText = null;
private int selectedPosition = -1;// 选中的位置
public ListAdapter(ArrayList<ButtonView> buttonListView) {
// TODO Auto-generated constructor stub
arrayList = buttonListView;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return arrayList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return arrayList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public void setSelectedPosition(int position) {
selectedPosition = position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.button_layout, null, false);
buttonLayoutHolder = (ButtonLayoutHolder) view.getTag();
if (buttonLayoutHolder == null) {
buttonLayoutHolder = new ButtonLayoutHolder();
buttonLayoutHolder.buttonLayout = (LinearLayout) view
.findViewById(R.id.LinearLayoutButton);
buttonLayoutHolder.textView = (TextView) view
.findViewById(R.id.TextViewButton);
view.setTag(buttonLayoutHolder);
}
buttonLayout = buttonLayoutHolder.buttonLayout;
buttonText = buttonLayoutHolder.textView;
if (selectedPosition == position) {
buttonText.setSelected(true);
buttonText.setPressed(true);
buttonLayout.setBackgroundColor(Color.RED);
} else {
buttonText.setSelected(false);
buttonText.setPressed(false);
buttonLayout.setBackgroundColor(Color.TRANSPARENT);
}
buttonText.setTextColor(Color.WHITE);
buttonText.setText(arrayList.get(position).textViewId);
return view;
}
};
}
class ButtonView {
int textViewId;
ButtonView(int tId) {
textViewId = tId;
}
}
class ButtonLayoutHolder {
LinearLayout buttonLayout;
TextView textView;
}
在listView的setOnItemClickListener事件中标记这次选择的Item的下标:listAdapter.setSelectedPosition(arg2);
然后调用listAdapter.notifyDataSetInvalidated()通知后台重新刷新界面。
在ListAdapter的getView()方法中,如果是选中的Item则显示背景颜色,如果不是则不显示背景颜色。
分享到:
相关推荐
"ListView选中item颜色改变"是常见的需求,它涉及到ListView的交互设计,使得用户可以通过视觉反馈感知到所选中的条目。本篇文章将深入探讨如何实现这个功能。 首先,我们需要了解ListView的基本工作原理。ListView...
在XML布局文件中,我们可以为选中状态定义不同的背景颜色、边框等样式,然后在`getView()`方法中根据选中状态应用相应的布局。 ```xml <!-- item_layout.xml --> <LinearLayout xmlns:android=...
要改变ListView选中行的字体颜色和图片,我们需要理解ListView的工作原理,以及如何自定义其Adapter和视图。以下是一些关键知识点的详细介绍: 1. **ListView的基本使用**: - ListView是一个视图容器,它能加载...
注意,在上述代码中,`android:state_selected="true"`状态用于定义ListView项被选中时的背景,这表明当ListView的某个item被选中时,会使用tvitembg.xml中定义的选中状态对应的背景图片。 通过上述步骤,即可实现...
在这个"android studio,demo,listview的测试,选中某一个选项item,颜色的变化"项目中,我们将探讨如何在Android Studio中创建一个ListView,并实现点击某个列表项时,该项的颜色变化效果。这个功能通常用于提供用户...
2. 设置ListView的Item背景:在ListView的Adapter中,为每个列表项View设置上面创建的选择器作为背景。通常在`getView()`方法中完成: ```java @Override public View getView(int position, View convertView, ...
本篇将详细介绍如何实现“安卓ListView选中状态”以及如何在其上添加背景颜色。 首先,我们需要理解ListView的工作原理。ListView通过Adapter类来绑定数据源,Adapter会将数据转化为View显示在列表中。每个View代表...
- 为了实现选中项高亮显示,我们需要自定义一个ListView的Item布局,添加一个背景资源,该资源包含两种状态:默认状态和选中状态。通常,我们可以使用selector资源文件来定义这两种状态。 - Selector是一种...
在XML中定义一个StateListDrawable,然后将其设置为ListView item的背景。 6. **保存和恢复选择状态** 当ListView滚动时,为了保持选中状态,你需要在Adapter中保存每个item的选择状态。可以使用...
1. **设置选择模式**:在XML布局文件中或代码中设置ListView的`android:listSelector`属性,该属性用于定义列表项被选中时的背景。你可以设置一个自定义的Drawable资源,或者使用系统默认的高亮颜色。 2. **监听...
总之,自定义Android ListView的选中效果涉及到Drawable状态选择器、Item布局、Adapter以及事件监听等多个方面。通过灵活运用这些技术,开发者可以创建出各种独特的交互体验,使应用更加吸引人。
总之,自定义圆角ListView项和处理选中背景是Android开发中的常见需求。通过理解ListView的工作机制,结合布局文件、代码绘制、监听事件和自定义Adapter,我们可以实现各种个性化的效果。在实际开发中,要注意性能...
1、item的layout设置background颜色值,去掉背景颜色即可 2、listview中listselector属性的效果被覆盖了,比如列表的Item为一个占满单元格的ImageView的时候,ImageView如果有内容那么listSelector的效果就会被挡住 ...
以上就是实现“Android列表之圆角ListView选中”的基本步骤。CornerDemo1这个项目应该包含了实现这个功能的示例代码,你可以通过阅读和运行它来深入理解这些概念。在实际开发中,可以根据具体需求调整样式和交互,让...
在ListView的每一项布局文件中,可以添加一个背景颜色属性,比如使用一个selector资源文件。Selector是一种状态列表资源,可以根据组件的状态改变其外观。在selector中定义两种状态,一种是默认状态,一种是选中...
在适配器中,根据item是否被选中来设置其背景。 2. **实现ChoiceMode**:ListView有一个setChoiceMode()方法,可以设置为SingleChoice、MultipleChoice或None。例如,使用SingleChoice模式,ListView会自动处理单选...
为了让用户明确知道哪一项被选中,可以设置选中项的颜色、背景等视觉效果。这需要在Adapter的`getView()`方法中根据当前项的选中状态来设置。 6. 事件监听: 通过实现`OnItemClickListener`和`...
本教程将详细介绍如何在Android中实现圆角ListView并处理选中状态,基于提供的"Android列表之圆角ListView选中(二)"项目。 首先,我们需要理解ListView的基本用法。ListView通过Adapter来绑定数据,并通过...
"ListView选中多个"这个主题主要涉及到ListView的复选框选择、多选模式以及相关的事件处理。 1. **复选框选择**: 在ListView中实现多选,通常会在每个列表项中添加一个复选框。这可以通过自定义Adapter来完成,...