我看到一个应用程序,如果按下按钮它会播放铃声,然后如果你按下它,会出现一个消息框,询问你是否要保存声音文件。我想让我的应用程序检测按钮是否按下了几秒钟。
我无法弄清楚如何检测按钮是否长时间按下。我试着谷歌搜索它,但是空了。
答案 0 :(得分:1)
您正在寻找OnGestureListener,特别是onLongPress:
如果你只想使用onLongPress,你会想要使用便利类:
http://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener.html
答案 1 :(得分:0)
这取决于你对“像几秒钟”部分的具体程度。您可以在任何视图(包括OnLongClickListener
... docs link)上设置Button
,这是用户可以理解的标准系统事件。但是,此事件的超时时间为500毫秒。
如果您确实需要将手指放下几秒钟,则需要自己计时,在这种情况下,OnTouchListener
会在Handler
上启动ACTION_DOWN
并检查postDelayed()
之后的视图状态通常可以解决问题。
答案 2 :(得分:0)
显然你还没有读过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()并传递要设置侦听器的视图。 Reference
示例代码:
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);
}
}