Android: 当父元素聚焦时改变TextView文字颜色

9

我有一个LinearLayout里面嵌套了一个TextView。这个LinearLayout可以获得焦点,当它获得焦点时,我希望TextViewtextColor能够改变。我尝试使用ColorStateList,但是当LinearLayout获得焦点时,TextView似乎没有获得焦点。我知道这一点,因为我已经尝试过下面的代码:

mTextView.setOnFocusChangeListener(new OnFocusChangeListener() {

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        Log.d(TAG, "Changed TextView focus to: " + hasFocus);
    }
});

但是没有任何日志被记录。我不想在LinearLayout上使用OnFocusChangeListener来改变TextView的textColor,我认为这必须从XML中完成。这样做的原因是,在另一个活动中,我有一个带有自定义适配器和自定义视图的ExpandableListView,并且当项目聚焦时,Android会更改自定义视图中TextView的textColor(从浅色到深色)。

2个回答

13

这是一篇旧帖子,但由于我遇到了同样的问题,这里是我找到的用于解决此问题的 XML 属性:

android:duplicateParentState="true"

(当布局状态改变时,添加到TextView以改变其“聚焦”状态)


工作得很顺利 :) - undefined

4
您可以在LinearLayout的监听器的onFocuseChange方法中获取您的TextView。像这样:
public void onFocusChange(View v, boolean hasFocus) {
    TextView tv = (TextView)v.findViewById(R.id.myTextView);
    tv.setTextColor(R.color.foo);
}

由于您的LL可以托管多个小部件,因此我认为即使您只有一个控件,在LL的onFocus时不会传播也是可以预期的。


我知道我可以那样做,但正如我在原帖中所说,我想避免这种情况。此外,如果您曾经为ListView使用自定义适配器,您会发现它仍会在聚焦列表项时更改文本颜色,无论您在项视图中有多少元素。我很好奇他们是如何做到的,我敢打赌这只是通过XML完成的。 - Felix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,