ボタンを押すと着信音が鳴り、ボタンを押し続けると、サウンドファイルを保存するかどうかを尋ねるメッセージボックスが表示されるアプリを見ました。ボタンが数秒間押されたかどうかをアプリに検出させたいと思います。
ボタンが長押しされたかどうかを検出する方法がわかりません。私はそれをグーグルで試しましたが、空になりました。
ボタンを押すと着信音が鳴り、ボタンを押し続けると、サウンドファイルを保存するかどうかを尋ねるメッセージボックスが表示されるアプリを見ました。ボタンが数秒間押されたかどうかをアプリに検出させたいと思います。
ボタンが長押しされたかどうかを検出する方法がわかりません。私はそれをグーグルで試しましたが、空になりました。
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
ありACTION_DOWN
ますpostDelayed()
。