fin*_*oop 4 android listview view
在Android中,默认情况下,当您长按单击列表项时,它会从突出显示颜色变为白色,表示用户已将其按下并显示上下文项.此外,您可以使用轨迹球(或某些手机上的箭头按钮)选择列表项,而不是使用手指.
但是,我有一个ListView,其项目的视图我正在调用setBackgroundColor,并且这两个预期的行为都不再起作用.有谁知道这是为什么以及如何解决它?
注意:在xml中设置背景颜色不是一个选项,因为我需要能够动态设置/更改颜色.
我的newView函数的代码如下:
@Override
public View newView(Context ctx, Cursor cursor, ViewGroup parent)
{
View view = new View(mCtx);
final LayoutInflater li = (LayoutInflater) mCtx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = li.inflate(R.layout.task_list_item, null);
return view;
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,ListView有一个在长按列表项时Selector会播放TransitionDrawable.但是,如果列表项视图具有纯色背景,那么您将无法看到选择器的长按动画(或任何其他状态),因为它被列表项的背景所掩盖.
如果要查看选择器的长按动画/选择/按下状态,则在选择/按下/按下项目时,列表项必须具有透明背景.您可以使用StateListDrawable作为项目的背景而不是纯色来实现.
以下是StateListDrawable的示例:
public class ColorfulListItemDrawable extends StateListDrawable {
private final PaintDrawable mColor;
public ColorfulListItemDrawable(int color) {
mColor = new PaintDrawable(color);
initialize();
}
private void initialize() {
Drawable color = mColor;
Drawable selected = new ColorDrawable(Color.TRANSPARENT);
addState(new int[] {android.R.attr.state_pressed, android.R.attr.state_enabled,
android.R.attr.state_window_focused}, selected);
addState(new int[] {android.R.attr.state_pressed, android.R.attr.state_enabled,
android.R.attr.state_window_focused,android.R.attr.state_selected}, selected);
addState(new int[] {android.R.attr.state_enabled,android.R.attr.state_window_focused, android.R.attr.state_selected}, selected);
addState(new int[] {}, color);
}
public void setColor(int color) {
mColor.getPaint().setColor(color);
mColor.invalidateSelf();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1352 次 |
| 最近记录: |