赞
踩
平日里工作碰到的问题,现在写下来给自己做一下笔记,有这个问题的朋友也可以看一下。
首先,写一个selector.xml
- <?xml version="1.0" encoding="utf-8"?>
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
-
- <item android:state_focused="true"><shape>
- <solid android:color="#ffb400" />
- </shape></item>
- <item android:state_selected="true"><shape>
- <solid android:color="#33999999" />
- </shape></item>
- <item android:drawable="@android:color/transparent"/>
-
- </selector>
接着在看看item.xml的定义:
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="330px"
- android:layout_height="90px"
- android:background="@drawable/selector.xml"
- android:focusable="true" >
-
- <TextView
- android:id="@+id/channel_type_name"
- android:layout_width="wrap_content"
- android:layout_height="90px"
- android:layout_alignParentRight="true"
- 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为选中,
所以我在设配器里面加了这个监听:
- convertView.setOnKeyListener(new OnKeyListener() {
-
- @Override
- public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
- if (arg2.getAction() == KeyEvent.ACTION_DOWN) {
- if (arg1 == KeyEvent.KEYCODE_DPAD_RIGHT) {
- mViewPager2.getChildAt(0).requestFocus();//默认第一个获取焦点
- channelTypeView.getChildAt(position).setSelected(true);
- return true;
- }
- }
- return false;
- }
- });
这样子就可以了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。