アクション バーのメニュー項目に固定したいがありますが、クリックしたい項目の にPopupWindow
アクセスできないようです。View
これはPopupWindow
showAsDropDown()
メソッドに必要です。
これを達成する方法を知っている人はいますか?
アクション バーのメニュー項目に固定したいがありますが、クリックしたい項目の にPopupWindow
アクセスできないようです。View
これはPopupWindow
showAsDropDown()
メソッドに必要です。
これを達成する方法を知っている人はいますか?
onOptionsItemSelected
..で取得することにより、メニュー項目 ID を使用してビューを取得できます。
findViewById(R.id.menu_item);
アクション アイテムのビューを取得するために、onOptionsItemSelected で findViewById を実行する必要はありません。
ただし、アクション アイテムがオーバーフロー メニュー内にある場合があるため、代わりに null が返される場合があることに注意してください。
それで、どうすればそれができますか?
サンプルコードは次のとおりです。
public boolean onCreateOptionsMenu(final Menu menu) {
getSupportMenuInflater().inflate(R.menu.main, menu);
new Handler().post(new Runnable() {
@Override
public void run() {
final View menuItemView = findViewById(R.id.menu_action_item);
...
これは、android 4.1.2 および android 2.3.5 で actionBarSherlock ライブラリを使用するときにテストされました。
もう 1 つの方法は、showcaseView ライブラリ(こちら) で使用される、より広範な方法を使用することです。
私もこの問題に直面しています。findViewById は私の側で作業する必要があります。サンプル コードは次のとおりです。
private void setDrawable(final Menu menu) {
if (menu == null || menu.size() == 0) return;
Utils.postToUiHandler(new Runnable() {
@Override
public void run() {
int size = menu.size();
for (int i = 0; i < size; i++) {
MenuItem menuItem = menu.getItem(i);
if (menuItem != null) {
View view = activity.findViewById(menuItem.getItemId());
if (view != null) {
Drawable drawable = ThemeDrawables.get(ThemeWorker.Segment.DEFAULT).actionbarButton();
if (drawable != null && view.getBackground() != drawable) {
int sdk = android.os.Build.VERSION.SDK_INT;
if (sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
view.setBackgroundDrawable(drawable);
} else {
view.setBackground(drawable);
}
}
}
}
}
}
});
}
menuitem のビューが膨張していないため、UI スレッドで findViewById を作成することに注意してください。したがって、UI スレッドで実行する必要があります。