Android中TextView绑定Selector后鼠标操作无背景变化问题
解决TextView鼠标操作时Selector背景不切换的问题
问题核心在于TextView默认不具备可交互属性,无法触发Selector中定义的state_pressed、state_focused等状态,同时Selector的状态匹配顺序也需要调整以保证优先级正确。
步骤1:调整Selector的状态匹配顺序
Selector的匹配逻辑是从上到下,先匹配到的状态生效。点击操作的state_pressed优先级应高于state_focused和state_selected,修改selector2.xml如下:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 点击按压状态 --> <item android:state_pressed="true" android:drawable="@android:color/holo_blue_bright" /> <!-- 选中状态 --> <item android:state_selected="true" android:drawable="@android:color/holo_green_dark" /> <!-- 焦点状态 --> <item android:state_focused="true" android:drawable="@android:color/darker_gray" /> <!-- 默认状态 --> <item android:drawable="@android:color/holo_blue_dark" /> </selector>
步骤2:修改TextView的布局属性
给TextView添加可点击、可获取焦点的属性,让它能响应鼠标/触摸操作:
<TextView android:background="@drawable/selector2" android:textColor="@color/color_mk_white" android:text="Temperature" android:layout_height="match_parent" android:layout_width="match_parent" android:gravity="center" <!-- 核心添加属性 --> android:clickable="true" android:focusable="true" android:focusableInTouchMode="true" />
补充说明
android:clickable="true":开启TextView的点击响应能力,是触发state_pressed的前提android:focusable="true":允许TextView获取焦点,对应state_focused状态android:focusableInTouchMode="true":让TextView在鼠标/触摸操作下也能获取焦点
完成以上修改后,点击TextView即可看到背景色按照Selector定义的规则切换。
内容的提问来源于stack exchange,提问作者vico
相关产品推荐
相关产品推荐

