私はアクションバーのメニュー項目にアンカーしたいが、クリックしたい項目のView
にあるとは思えない、PopupWindow
がある。 これは、PopupWindow
showAsDropDown()
メソッドに必要です。アクションバーのメニュー項目からビューを取得
これを達成する方法を知っている人はいますか?
私はアクションバーのメニュー項目にアンカーしたいが、クリックしたい項目のView
にあるとは思えない、PopupWindow
がある。 これは、PopupWindow
showAsDropDown()
メソッドに必要です。アクションバーのメニュー項目からビューを取得
これを達成する方法を知っている人はいますか?
あなたは... onOptionsItemSelected
でそれを取得することで、メニュー項目のIDを使用してビューを取得することができます
findViewById(R.id.menu_item);
findViewByIdは、アクションアイテムのビューを取得するために、onOptionsItemSelected上で実行する必要はありません。
ただし、アクション項目がオーバーフローメニューの内側になることがあるため、代わりにnullが返されることがあることに注意してください。
だから、どうすればいいですか?
は、ここではサンプルコードです:
アンドロイド4.1.2とAndroid 2.3.5に、actionBarSherlockライブラリを使用している場合、これは試験した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);
...
。
さらに別の方法は、showcaseView library、hereで使用されているより広範な方法を使用することです。
サードパーティのライブラリを使用せずにそれを行う良い方法を知っていますか? –
はい、actionBarSherlockを使わずに同じことをします。私がテストしたものこのライブラリは、アンドロイドバージョンが3.0以上の場合の通常のネイティブアクションバーを表示します。 –
これを使用すると、ヌルビューが表示されます。 – ingsaurabh
毎週どこコール:
activity.findViewById(R.id.menu_item);
フラグメント内部のコードが使用していない場合:
getView().findViewById(R.id.menu_item);
それはヌルを返します。私もこの問題を満たす
は機能しません。 ger reference null –
、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);
}
}
}
}
}
}
});
}
注意してください、私はUIスレッドでfindViewByIdを作ります がUIスレッドで実行されている必要があります
これは機能しません。まず最初に試したところ、nullポインタが返されました。しかし、私はアクションバーの項目がViewではないようなMenuItemであるため、とにかくそれを期待しません。だから、私はそのMenuItem内のビューに取得しようとしています – Kyros
は、あなたがそれをあなたのポップアップウィンドウに渡すために、アクティビティ内でそれを呼び出す必要があります。私のために働いています – Nermeen
私はOnCreateで表示、どこで呼びますか? – Kyros