Android Actionbar item options long click について誰でも知ることができますか? ActionBar long press の長押しのヒントのように、アクションバー メニュー オプションの LongClick にテキストを表示したい
6 に答える
アクションバーのメニュー項目の長押しをキャプチャしますか? 私に関しては、2,3時間を見つけた後、この解決策を見つけました。これは私にとって完璧に機能します。
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
new Handler().post(new Runnable() {
@Override
public void run() {
final View v = findViewById(R.id.action_settings);
if (v != null) {
v.setOnLongClickListener(new CustomLongOnClickListener());
}
}
});
return true;
}
私にとっては、次のアプローチは新しい Android バージョンでは問題なく機能します。Android 4.2 と Android 5.0.1 でテストしました。
アイデアは、アクション アイコン ビューをカスタム ビューに置き換えることです。ここでは、シングル クリックを処理する必要があり、ロング クリックを処理できます。
外観を通常のアクション バー アイコンとまったく同じにしたい場合は、次のようにします。
最初に、アイコンを含む ImageButton のみを含むレイアウトを作成します。
<?xml version="1.0" encoding="utf-8"?>
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myButton"
style="?android:attr/actionButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@layout/text_view_initializing"
android:src="@drawable/ic_action_plus" />
次に、この ImageButton をアクション バーに配置し、リスナーをアタッチします。
MenuItem myItem = menu.findItem(R.id.my_action);
myItem.setActionView(R.layout.my_image_button);
myItem.getActionView().setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
// here, I have to put the stuff that normally goes in onOptionItemSelected
}
});
myItem.getActionView().setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(final View v) {
// here, I put the long click stuff
}
});
重要な注意: これは、アイテムがアクション バーに表示される場合にのみ機能します。そのため、オプションがメニュードロップダウンに表示されている場合、長いクリックでやりたいことはすべてこの方法ではアクセスできません。
user1206890、ロング クリック イベントをリッスンする必要はありません。アクションのヒントを表示したい場合は、メニュー追加でタイトルを設定するだけで十分です。2.3と4.0で確認。
を介して独自のアクション ビューを作成する場合android:actionLayout
は、ロング クリック イベント用に独自のウィジェットにリスナーを設定できます。自分で作成していないアクション バーのウィジェットにはアクセスできません。
「findViewById」が最も簡単に見つける方法だと思います。
やるだけ
View action_example = findViewById(R.id.action_example);
if(action_example!=null)action_example.setOnLongClickListener(
new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MainActivity.this, "action_example", Toast.LENGTH_SHORT).show();
return true;
}
}
);