我有一个简单的视图定义为
<View
android:id="@+id/action_edit"
android:layout_width="24dp"
android:layout_height="24dp"
android:background="@drawable/ic_edit_black_24dp"
android:layout_marginEnd="@dimen/text_margin"
android:layout_marginStart="@dimen/text_margin"
android:layout_centerVertical="true"
android:layout_alignParentEnd="true"/>
我正在尝试注册onClick和onTouch事件,如下所示。
mEditButton = view.findViewById(R.id.action_edit);
mEditButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (null != mListener) {
// Notify the active callbacks interface (the activity, if the
// fragment is attached to one) that an item has been selected.
mListener.onListFragmentInteraction_Item_Edit_Button_Clicked(mItem);
}
}
});
mEditButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
ith.startDrag(EditTextViewHolder.this);
}
return false;
}
});
这在模拟器,联想A6000 +(棒棒糖),Moto X Play(棉花糖)中运行良好。但是,当我尝试在 Oneplus X (Marshmallow)和小米米设备上运行应用程序onClickListener时没有被解雇。当我删除onTouchListener然后onClickListener工作。一些onTouchListener如何消耗事件,即使我正在返回&#39; false&#39;。
我尝试为视图添加以下属性,但没有运气。
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
我尝试用按钮, ImageButton 替换查看,但没有运气。这是设备的某种错误还是我在这里做错了什么?我不明白它是如何在其他设备和模拟器中工作的,而不是在所述设备中工作。
如果没有办法纠正这个问题,有人可以建议替代它,比如只使用onTouchListener来检测点击次数以及滑动手势吗?
我在SO中尝试了所有相关问题,但没有一个对我有用,所以我发布了一个新问题。
答案 0 :(得分:0)
您可以通过以下方式检测onTouchListener
点击事件:
mEditButton.setOnTouchListener(new View.OnTouchListener() {
private static final int MAX_CLICK_DURATION = 200;
private long startClickTime;
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN: {
startClickTime = Calendar.getInstance().getTimeInMillis();
break;
}
case MotionEvent.ACTION_UP: {
long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
if (clickDuration < MAX_CLICK_DURATION) {
//click event has occurred
}
}
}
return true;
}
});
答案 1 :(得分:0)
您应该只使用onTouch事件。
要将单击与其他内容区分开来,您可以使用GestureDetector
。
你可以尝试这样的事情:
GestureDetector gDetector = new GestureDetector(this, new SingleTap());
mEditButton.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
if (gDetector.onTouchEvent(event)) {
// single tap happened
return true;
} else {
// your code for move and drag or everything else
}
return false;
}
});
private class SingleTap extends SimpleOnGestureListener {
@Override
public boolean onSingleTapUp(MotionEvent event) {
return true;
}
}
您可以在Android开发者网站here
上找到更多信息和教程