当前位置:   article > 正文

[Android]ListView 设置焦点与选中时改变item颜色_android style修改item焦点颜色

android style修改item焦点颜色

平日里工作碰到的问题,现在写下来给自己做一下笔记,有这个问题的朋友也可以看一下。

首先,写一个selector.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:state_focused="true"><shape>
  4. <solid android:color="#ffb400" />
  5. </shape></item>
  6. <item android:state_selected="true"><shape>
  7. <solid android:color="#33999999" />
  8. </shape></item>
  9. <item android:drawable="@android:color/transparent"/>
  10. </selector>




如代码所示,item的状态是如果是焦点选中,那么就是第一个颜色,如果是焦点没有,但是选中状态,那么就是第二个颜色,如果都没有焦点和选中,就是第三个颜色。这里要注意几个item的定义顺序(这里相当于switch的效果,满足了某个item就不会走下去了)


接着在看看item.xml的定义:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="330px"
  4. android:layout_height="90px"
  5. android:background="@drawable/selector.xml"
  6. android:focusable="true" >
  7. <TextView
  8. android:id="@+id/channel_type_name"
  9. android:layout_width="wrap_content"
  10. android:layout_height="90px"
  11. android:layout_alignParentRight="true"
  12. android:layout_marginRight="100px"
	android:duplicateParentState="true"
android:gravity="center_vertical"

	android:singleLine="true" 
	android:textColor="@drawable/back_sl_tab_text" 
	android:textSize="36px" /></RelativeLayout>

把定义好的selector.xml给布局做背景。

可以看到item只有一个TextView,这里我为了要焦点落在item上的时候改变TextView的字体颜色,所以加android:textColor="@drawable/back_sl_tab_text"这个。(这里我们就不关心关于TextView的selector.xml)了

并且加了这句android:duplicateParentState="true",表示当前的view状态会跟随着父布局,比如当前父布局是选中状态,那么这个TextView也是选中状态

下面关于ListView的xml定义,这个就不发出来了。

ListView在代码里加了一句setItemsCanFocus(true),表示item可以获取焦点,因为我们是要整个item布局发生状态变化,所以要设置为true(若是item里面又checkbox或者其他的需要监听事件,那么这里就必须设置为false,不然点击会没有反应)

接下来运行后发现ListView有焦点的颜色和默认的颜色,但是没有选中效果。

最终发现,选中状态需要自己手动设置某个item为选中,

所以我在设配器里面加了这个监听:

  1. convertView.setOnKeyListener(new OnKeyListener() {
  2. @Override
  3. public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
  4. if (arg2.getAction() == KeyEvent.ACTION_DOWN) {
  5. if (arg1 == KeyEvent.KEYCODE_DPAD_RIGHT) {
  6. mViewPager2.getChildAt(0).requestFocus();//默认第一个获取焦点
  7. channelTypeView.getChildAt(position).setSelected(true);
  8. return true;
  9. }
  10. }
  11. return false;
  12. }
  13. });

代码中可以看到,当按键按下时,并且是按下右键,会让viewpager的第一个item获取焦点,然后我们再自己手动设置listView在position这个位置的view为选中状态。


这样子就可以了。


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/170800
推荐阅读
相关标签
  

闽ICP备14008679号