文档章节

Android Selector

当空皓月
 当空皓月
发布于 2014/10/08 23:05
字数 912
阅读 223
收藏 2
点赞 0
评论 0
  1. Selector的应用:

http://www.cnblogs.com/loulijun/archive/2012/04/15/2450312.html

使用selector修改TextView中字体的颜色:

http://blog.csdn.net/dinglin_87/article/details/7885806 

2.这个是另一种思路

http://blog.csdn.net/lo5sea/article/details/6647680

3.viewholder高亮错乱

http://blog.sina.com.cn/s/blog_7040845601017ak5.html

关键代码如下:

final MyAdapter myAdapter=new MyAdapter(this, data);
  setListAdapter(myAdapter);
  getListView().setOnItemClickListener(new OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
      myAdapter.setSelectItem(position);
       myAdapter.notifyDataSetInvalidated();

   }
  });

public class MyAdapter extends BaseAdapter {
  private Context context;
  private List<Map<String, Object>> list;
  private LayoutInflater layoutInflater;
  private int selectItem=-1;
  public MyAdapter(Context context, List<Map<String, Object>> list) {
   this.context = context;
   this.list = list;
   this.layoutInflater = LayoutInflater.from(context);
  }

  @Override
  public int getCount() {
   return list.size();
  }

  @Override
  public Object getItem(int position) {
   return list.get(position);
  }

  @Override
  public long getItemId(int position) {
   return position;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
   final ViewHolder viewHolder;
   if (convertView == null) {
    convertView = layoutInflater.inflate(R.layout.item, null);
    viewHolder = new ViewHolder();
    viewHolder.linearlayout = (LinearLayout) convertView.findViewById(R.id.linearlayout);
    viewHolder.img = (ImageView) convertView.findViewById(R.id.img);
    viewHolder.title = (TextView) convertView.findViewById(R.id.title);
    convertView.setTag(viewHolder);
   } else {
    viewHolder = (ViewHolder) convertView.getTag();
   }
   viewHolder.img.setBackgroundResource((Integer) list.get(position).get("imgid"));
   viewHolder.title.setText(list.get(position).get("title").toString());
   //如果位置相同则设置背景为黄色
    if (position == selectItem) {
    convertView.setBackgroundColor(Color.YELLOW);
    }
    else {
    convertView.setBackgroundColor(Color.TRANSPARENT);
    }

   return convertView;
  }

  public void setSelectItem(int selectItem) {
   this.selectItem = selectItem;
  }

  class ViewHolder {
   private LinearLayout linearlayout;
   private TextView title;
   private ImageView img;
  }
 }



android:listSelector="#00000000"  :可以使listview 的item默认点击的背景黄色为透明

4.最简单的一种:

 <ListView

        android:id="@+id/road_condition_listview"

        android:layout_width="match_parent"

        android:listSelector="#f00"

        android:layout_height="fill_parent" >

    </ListView>

一个教训:

 listview的item的布局为:一个线性布局中有两个图片,一个文本,设置listview的setOnItemClickListener,跳转的到详情页,现在的问题是:能跳转到详情页,但是点击的时候不是有个默认的选中的背景吗?这个不会显示,好像失去焦点了,设置android:listSelector=“#f00”也没有作用 

 自定义item布局,如果不是透明背景(就是item的根布局设置了bacground),就把原来的效果盖住了。需要自己设计布局的点击变色的效果
5.动态更换view类的背景----StateListDrawable的应用

参考:http://yq135314.iteye.com/blog/1333511

gridview初始化的item的背景色都不同,点击item有对应的点击后的效果,需要为每一个item都写一个selector.xml文件吗?不用!

@Override
  public View getView(int position, View convertView, ViewGroup parent) {
   if (convertView == null) {
    convertView = mLayoutInflater.inflate(R.layout.bottom_gridview_item, null);
   }
   ImageView icon = (ImageView) convertView.findViewById(R.id.bottom_gridview_item_icon);
   TextView lable = (TextView) convertView.findViewById(R.id.bottom_gridview_item_lable);
   icon.setImageResource((int) bottom_listData.get(position).get("icon"));
   lable.setText((String) bottom_listData.get(position).get("lable"));
   //convertView.setBackgroundColor(bottom_bgs[position]);
   TypedArray colorsArrayNormal = getResources().obtainTypedArray(R.array.bg_colors);
   TypedArray colorsArraySelected = getResources().obtainTypedArray(R.array.bg_colors_selected);
   convertView.setBackground(addStateDrawable(MainActivity.this, colorsArrayNormal.getResourceId(position,0), colorsArraySelected.getResourceId(position,0), colorsArraySelected.getResourceId(position,0)));
   //convertView.setBackground(colorsArrayNormal.getDrawable(position));
   return convertView;
  }

 }
  public StateListDrawable addStateDrawable(Context context,  int idNormal, int idPressed, int idFocused) { 
       StateListDrawable sd = new StateListDrawable(); 
       Drawable normal = idNormal == -1 ? null : context.getResources().getDrawable(idNormal); 
        Drawable pressed = idPressed == -1 ? null : context.getResources().getDrawable(idPressed); 
        Drawable focus = idFocused == -1 ? null : context.getResources().getDrawable(idFocused); 
        //注意该处的顺序,只要有一个状态与之相配,背景就会被换掉 
        //所以不要把大范围放在前面了,如果sd.addState(new[]{},normal)放在第一个的话,就没有什么效果了  
        sd.addState(new int[]{android.R.attr.state_enabled, android.R.attr.state_focused}, focus); 
        sd.addState(new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled}, pressed); 
        sd.addState(new int[]{android.R.attr.state_focused}, focus); 
        sd.addState(new int[]{android.R.attr.state_pressed}, pressed); 
        sd.addState(new int[]{android.R.attr.state_enabled}, normal); 
        sd.addState(new int[]{}, normal); 
        return sd; 
    } 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array name="bg_colors">
        <item >@color/f1</item>
        <item >@color/f2</item>
        <item >@color/f3</item>
        <item >@color/f4</item>
        <item >@color/f5</item>
        <item >@color/f6</item>
    </integer-array>
    <integer-array name="bg_colors_selected">
        <item >@color/f11</item>
        <item >@color/f21</item>
        <item >@color/f31</item>
        <item >@color/f41</item>
        <item >@color/f51</item>
        <item >@color/f61</item>
    </integer-array>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
     <color name="f1">#ecf9ff</color><!--白色 -->   
     <color name="f2">#ffc71c</color><!--淡黄 -->   
     <color name="f3">#048bc3</color><!--浓蓝 -->   
     <color name="f4">#01b5f4</color><!--淡蓝 -->   
     <color name="f5">#f49f10</color><!--浓黄 -->   
     <color name="f6">#91db00</color><!--绿色 -->   
    
     <color name="f11">#aceefa</color><!--白色选中 -->   
     <color name="f21">#aceefa</color><!--淡黄选中 -->   
     <color name="f31">#aceefa</color><!--浓蓝选中 -->   
     <color name="f41">#aceefa</color><!--淡蓝选中-->   
     <color name="f51">#aceefa</color><!--浓黄选中 -->   
     <color name="f61">#aceefa</color><!--绿色选中 -->   
</resources>


六、android LinearLayout设置selector不起作用解决:

设置方法 : android:background="@drawable/fen_selector"

如果只有这个的话,是不起作用的。还必须加上: android:clickable="true"


© 著作权归作者所有

共有 人打赏支持
当空皓月
粉丝 13
博文 179
码字总数 67070
作品 0
郑州
android的selector背景选择器

android的背景选择器selector算是比较常用的了。我们在做页面的时候,系统原生的按钮了,listView的item了,他们在被选中的时候那种屎黄色的背景。。。。。。。 所以我们就会用到selector来设...

Cory
2013/05/28
0
1
android背景选择器selector用法汇总

android背景选择器selector用法汇总 (2011-04-19 13:40:00) 转载▼ <selector>节点的使用,该节点的作用就是定义一组状态资源图片,使其能够 在不同的状态下更换某个View的背景图片 一.创建...

无一物
2012/11/05
0
0
android的selector(背景选择器)

最近做listview和button都要改变Android原来控件的背景,在网上查找了一些资料不是很全,所以现在总结一下android的selector的用法。 首先android的selector是在drawable/xxx.xml中配置的。 ...

z.net
2012/11/05
0
0
android背景选择器selector用法汇总

一.创建xml文件,位置:drawable/xxx.xml,同目录下记得要放相关图片 <?xml version="1.0" encoding="utf-8" ?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!......

stefanliao
2012/05/22
0
0
android 自定义 radiobutton 文字颜色随选中状态而改变

先看效果 主要是写一个 color selector 在res/建一个文件夹取名color res/color/color_radiobutton.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.......

韩工
2012/05/22
0
2
Android开发教程:shape和selector的结合使用

shape和selector是Android UI设计中经常用到的,比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到shape和selector。可以这样说,shape和selector在美化控件中的作用是至...

程序袁_绪龙
2014/09/08
0
0
Android开发教程:shape和selector的结合使用

shape和selector是Android UI设计中经常用到的,比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到shape和selector。可以这样说,shape和selector在美化控件中的作用是至...

方毅超
2014/05/16
0
0
selector修改TextView点击后的颜色属性

selector想必大家都用过了,但是在修改字体的颜色的时候还是要细心。 我们在TextView中设置字体颜色一般使用 Android:textColor="@color/red" 但是我们在使用selector动态修改字体颜色的时候...

671076656
06/26
0
0
android 自定义toggle Button按钮

很多人想做一个和iphone的,其实很简单 但是很多人问 主要是修改样式和图标就好了 <ToggleButton android:layoutwidth="wrapcontent" android:layoutheight="wrapcontent" android:backgroun...

亭子happy
2013/11/11
0
0
自定义Android的ListView布局和各Item的背景色

Android中的ListView是用得非常频繁的一种组件,同时ListView也是一种很强大的组件,你可以为每一行自定义布局,也可以修改各行的 背景色。自定义布局比较容易,自己实现一个layout的布局文件...

LiSteven
2013/03/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周一乱弹 —— 如果是你喜欢的女同学找你借钱

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @guanglun :分享Michael Learns To Rock的单曲《Fairy Tale》 《Fairy Tale》- Michael Learns To Rock 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
33分钟前
9
3
NNS域名系统之域名竞拍

0x00 前言 其实在官方文档中已经对域名竞拍的过程有详细的描述,感兴趣的可以移步http://doc.neons.name/zh_CN/latest/nns_protocol.html#id30 此处查阅。 我这里主要对轻钱包开发中会用到的...

暖冰
今天
0
0
32.filter表案例 nat表应用 (iptables)

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 10.15 iptables filter表案例: ~1. 写一个具体的iptables小案例,需求是把80端口、22端口、21 端口放行。但是,22端口我...

王鑫linux
今天
0
0
shell中的函数&shell中的数组&告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析

影夜Linux
今天
0
0
Linux网络基础、Linux防火墙

Linux网络基础 ip addr 命令 :查看网口信息 ifconfig命令:查看网口信息,要比ip addr更明了一些 centos 7默认没安装ifconfig命令,可以使用yum install -y net-tools命令来安装。 ifconfig...

李超小牛子
今天
1
0
[机器学习]回归--Decision Tree Regression

CART决策树又称分类回归树,当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值;当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很...

wangxuwei
昨天
1
0
Redis做分布式无锁CAS的问题

因为Redis本身是单线程的,具备原子性,所以可以用来做分布式无锁的操作,但会有一点小问题。 public interface OrderService { public String getOrderNo();} public class OrderRe...

算法之名
昨天
11
0
143. Reorder List - LeetCode

Question 143. Reorder List Solution 题目大意:给一个链表,将这个列表分成前后两部分,后半部分反转,再将这两分链表的节点交替连接成一个新的链表 思路 :先将链表分成前后两部分,将后部...

yysue
昨天
1
0
数据结构与算法1

第一个代码,描述一个被称为BankAccount的类,该类模拟了银行中的账户操作。程序建立了一个开户金额,显示金额,存款,取款并显示余额。 主要的知识点联系为类的含义,构造函数,公有和私有。...

沉迷于编程的小菜菜
昨天
1
0
从为什么别的队伍总比你的快说起

在机场候检排队的时候,大多数情况下,别的队伍都要比自己所在的队伍快,并常常懊悔当初怎么没去那个队。 其实,最快的队伍只能有一个,而排队之前并不知道那个队快。所以,如果有六个队伍你...

我是菜鸟我骄傲
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部