Obtener la vista desde el elemento de menú de la barra de acciones

Tengo un PopupWindow que quiero anclar a un elemento de menú de la barra de acción, pero no puede parecer de todos modos para obtener en la View del elemento que quiero hacer clic en. Esto es necesario para el PopupWindow showAsDropDown() .

¿Alguien sabe como lograr esto?

4 Solutions collect form web for “Obtener la vista desde el elemento de menú de la barra de acciones”

Puede obtener la vista utilizando el ID del elemento de menú, haciéndolo en onOptionsItemSelected .

 findViewById(R.id.menu_item); 

FindViewById no tiene que ejecutarse en onOptionsItemSelected para obtener la vista del elemento de acción.

Sin embargo, tenga en cuenta que a veces elementos de acción llegar a estar dentro del menú de desbordamiento para que pueda obtener un nulo en su lugar.

Así que, ¿cómo puede hacerlo?

Aquí hay un ejemplo de código:

 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); ... 

Esto se probó cuando se utiliza la biblioteca actionBarSherlock, en android 4.1.2 y android 2.3.5.

Otra alternativa es usar una manera más extensa, usada en la biblioteca showcaseView , aquí .

Me encuentro con este problema, así, findViewById debe ser trabajado a mi lado, aquí está el código de ejemplo:

 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); } } } } } } }); } 

Tenga en cuenta, hago findViewById en el hilo de interfaz de usuario como menuitem 'vista no se infla por lo que debe estar ejecutando en el hilo de interfaz de usuario

En cada lugar:

 activity.findViewById(R.id.menu_item); 

Si el código dentro del fragmento no utiliza:

 getView().findViewById(R.id.menu_item); 

Se devolverá null .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.