在Android中,View.onLongClickListener()
大约需要1秒才能将其视为长按。如何配置长按的响应时间?
答案 0 :(得分:9)
默认超时由ViewConfiguration.getLongPressTimeout()
定义。
您可以实施自己的长按:
boolean mHasPerformedLongPress;
Runnable mPendingCheckForLongPress;
@Override
public boolean onTouch(final View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
if (!mHasPerformedLongPress) {
// This is a tap, so remove the longpress check
if (mPendingCheckForLongPress != null) {
v.removeCallbacks(mPendingCheckForLongPress);
}
// v.performClick();
}
break;
case MotionEvent.ACTION_DOWN:
if( mPendingCheckForLongPress == null) {
mPendingCheckForLongPress = new Runnable() {
public void run() {
//do your job
}
};
}
mHasPerformedLongPress = false;
v.postDelayed(mPendingCheckForLongPress, ViewConfiguration.getLongPressTimeout());
break;
case MotionEvent.ACTION_MOVE:
final int x = (int) event.getX();
final int y = (int) event.getY();
// Be lenient about moving outside of buttons
int slop = ViewConfiguration.get(v.getContext()).getScaledTouchSlop();
if ((x < 0 - slop) || (x >= v.getWidth() + slop) ||
(y < 0 - slop) || (y >= v.getHeight() + slop)) {
if (mPendingCheckForLongPress != null) {
v. removeCallbacks(mPendingCheckForLongPress);
}
}
break;
default:
return false;
}
return false;
}
答案 1 :(得分:0)
这可能是迟到的答案,但如果有人需要。
如果手机已植根,您可以更改超时时间。 只需将数据库中的值设置为所需的超时值即可。这将影响系统范围的长按事件。
目录:/ data / data /com.android.providers.settings / database
文件:settings.db
表格:安全
名称:long_press_timeout
通过编码?您可能需要系统应用程序权限。实际上并不那么确定。 但是如果你回溯跟踪ViewConfiguration.getLongPressTimeout()方法,你会发现常量值来自Settings.Secure.LONG_PRESS_TIMEOUT,它是 settings.db 的映射
超时设置操作是在View类中编写的,因此它会影响每个视图。