0

我看到一个应用程序,如果您按下按钮,它会播放铃声,然后如果您按住它,则会出现一条消息框询问您是否要保存声音文件。我想让我的应用程序检测按钮是否被按下了几秒钟。

我无法弄清楚如何检测按钮是否被长时间按住。我试着用谷歌搜索它,但结果是空的。

4

3 回答 3

1

您正在寻找 OnGestureListener,特别是 onLongPress:

http://developer.android.com/reference/android/view/GestureDetector.OnGestureListener.html#onLongPress(android.view.MotionEvent)

如果您只想使用 onLongPress,则需要使用便捷类:

http://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener.html

于 2013-02-05T03:03:07.893 回答
1

显然你还没有读过关于 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);
    }
}
于 2013-02-05T03:38:35.650 回答
0

这取决于您对“几秒钟”部分的具体程度。您可以OnLongClickListener在任何视图(包括Button... docs link)上设置一个用户可以理解的标准系统事件。但是,此事件的超时时间为 500 毫秒。

如果您确实需要将手指向下放置几秒钟,则需要自己计时此事件,在这种情况下,通常会OnTouchListener启动HandleronACTION_DOWN并检查视图状态postDelayed()

于 2013-02-05T03:27:12.890 回答