我正在为 Android 的拖放网格中的视图添加 onClick 突出显示。该项目位于GitHub 上(开发分支包含使用选择器的代码)。
当我将 onClick 选择器设置为视图的背景时,我遇到的问题是在适配器中,当我单击视图时,选择器不会更改该视图的背景,而是更改所有视图的背景。
我很确定这是 ViewGroup 中 onTouch 处理点击的方式(如下)。我不确定我是否应该以不同的方式返回 true/false 或以不同的方式触发 onClick 侦听器以防止突出显示所有视图。
任何想法/帮助表示赞赏,谢谢。
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
touchDown(event);
break;
case MotionEvent.ACTION_MOVE:
touchMove(event);
break;
case MotionEvent.ACTION_UP:
touchUp(event);
break;
}
if (aViewIsDragged())
return true;
return false;
}
private void touchUp(MotionEvent event) {
if(dragged == -1) {
if(onClickListener != null) {
View clickedView = getChildAt(getTargetAtCoor((int) event.getX(), (int) event.getY()));
if(clickedView != null)
onClickListener.onClick(clickedView);
}
} else {
manageChildrenReordering();
hideDeleteView();
cancelEdgeTimer();
movingView = false;
dragged = -1;
lastTarget = -1;
container.enableScroll();
cancelAnimations();
}
}
编辑:查看 ViewGroup 文档android:addStatesFromChildren听起来像我正在寻找的东西,但它似乎没有任何效果。
机器人:addStatesFromChildren
设置此 ViewGroup 的可绘制状态是否还包括其子级的可绘制状态。例如,这用于使一个组在其子 EditText 或按钮获得焦点时显示为焦点。
必须是布尔值,“真”或“假”。
这也可能是对包含此类型值的资源(形式为“@[package:]type:name”)或主题属性(形式为“?[package:][type:]name”)的引用.
这对应于全局属性资源符号 addStatesFromChildren。
更新
我找到了解决这个问题的方法。拉取请求在这里