Android ListView - 更改活动项目的文本颜色

时间:2014-08-13 12:40:10

标签: android listview

我想在Android中的ListView上创建自定义效果。我有一个包含文本项目的列表 - 一种菜单。当Android更改list元素下的背景时,我想更改文本的颜色(并为其添加阴影!)。

我有一个自定义视图(扩展了TextView),我覆盖了onTouchEvent()函数,并创建了一个函数,它可以改变文本的颜色。

@Override
public boolean onTouchEvent(MotionEvent event){
    Log.v(TAG, "" + event.getAction());
    if (event.getAction() == MotionEvent.ACTION_DOWN){
        Log.v(TAG, "Touch started.");
        setShadowLayer(6, 0, 0, getResources().getColor(R.color.selectedTextShadow));
        setTextColor(getResources().getColor(R.color.selectedTextColor));
        boolean b = super.onTouchEvent(event);
        Log.v(TAG, "Action down, super returns: " + (b ? "true" : "false"));
        //return true;
    }
    return super.onTouchEvent(event);
}

public void endSelection(){
    setShadowLayer(0, 0, 0, getResources().getColor(R.color.textColor));
    setTextColor(getResources().getColor(R.color.textColor));
}

在ListFragment中,我覆盖onListItemClick()函数,调用视图的endSelection函数。

@Override
public void onListItemClick (ListView l, View v, int position, long id){
    Log.v(TAG, "Clicked on: " + position);
    ((ListRowText) v.findViewById(R.id.subMenuRow_menuItem)).endSelection();
}

几乎是全押。但是(正如你在this视频中看到的那样),当我在其他地方“滑动”我的手指并且颜色“卡住”时,它不会改变颜色。

有没有更好的方法,这样做? 我找到了StateListDrawable,但是我无法为StateListDrawable添加阴影。或者我可以吗? 谢谢!

2 个答案:

答案 0 :(得分:0)

顺便看看UI。您可能希望查看Android Asset Studios的Holo colors generator并生成列表选择器,以查看正在跟踪的所有事件。对于单个列表项视图,您可能希望为文本视图创建一个单独的状态列表,并根据列表选择器对其进行样式设置。以下是生成的选择器处理的状态列表:

  • state_window_focused =假
  • state_focused = true&& state_enabled = false&& state_pressed =真
  • state_focused = true&& state_enabled =假
  • state_focused = true&& state_pressed =真
  • state_focused = false&& state_pressed =真
  • state_focused =真

答案 1 :(得分:0)

正如Patty P所说,你可以创建一个状态选择器,但在你的情况下,我认为你想要的是一个文本选择器。

http://developer.android.com/guide/topics/resources/color-list-resource.html

您只需在res文件夹中创建一个名为color的文件夹,就可以添加选择器,就像列表选择器一样。

然后您可以将其用作文本颜色。

机器人:文字颜色= “@颜色/ mystatelist”

州是相同的