我看到一个应用程序,如果您按下按钮,它会播放铃声,然后如果您按住它,则会出现一条消息框询问您是否要保存声音文件。我想让我的应用程序检测按钮是否被按下了几秒钟。
我无法弄清楚如何检测按钮是否被长时间按住。我试着用谷歌搜索它,但结果是空的。
我看到一个应用程序,如果您按下按钮,它会播放铃声,然后如果您按住它,则会出现一条消息框询问您是否要保存声音文件。我想让我的应用程序检测按钮是否被按下了几秒钟。
我无法弄清楚如何检测按钮是否被长时间按住。我试着用谷歌搜索它,但结果是空的。
您正在寻找 OnGestureListener,特别是 onLongPress:
如果您只想使用 onLongPress,则需要使用便捷类:
http://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener.html
显然你还没有读过关于 onLongClickListener 的内容吧?
阅读以下链接:
http://developer.android.com/reference/android/view/View.OnLongClickListener.html
示例代码:
buttonPlay.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//Do something when clicked normally.
}
});
buttonPlay.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
//Offer additional options when the view is held.
return true;
}
});
此外,您可以改为调用 registerForContextMenu() 并传递要设置侦听器的视图。参考
示例代码:
registerForContextMenu(textView);//Registering the TextView textview for longclicks
您必须编写代码来扩展上下文菜单:
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.your_context_menu, menu);
}
}
其中 id your_context_menu必须是在项目的 Res/Menu/ 文件夹下创建的 .xml 文件。
菜单膨胀后,您还必须编写代码以响应选择的选项。
@Override
public boolean onContextItemSelected(MenuItem item) {
Intent broadcast = new Intent();
switch (item.getItemId()) {
case R.id.menu_option_one:
//do something
return true;
default:
return super.onContextItemSelected(item);
}
}
这取决于您对“几秒钟”部分的具体程度。您可以OnLongClickListener
在任何视图(包括Button
... docs link)上设置一个用户可以理解的标准系统事件。但是,此事件的超时时间为 500 毫秒。
如果您确实需要将手指向下放置几秒钟,则需要自己计时此事件,在这种情况下,通常会OnTouchListener
启动Handler
onACTION_DOWN
并检查视图状态postDelayed()
。