studio poner how español cómo botón boton barra bar atrás agregar acciones android android-3.0-honeycomb menuitem android-actionbar

how - cómo poner el botón de atrás en android studio



¿Cómo agregar elementos del submenú a la acción ActionBar en el código? (3)

A través de xml puedo agregar elementos de submenú a mi acción en la ActionBar .

main_menu.xml:

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_new_form" android:icon="@drawable/ic_new_form" android:title="@string/menu_new_form" android:showAsAction="ifRoom|withText"> <menu> <item android:id="@+id/form1" android:icon="@drawable/attachment" android:title="Form 1" android:onClick="onSort" /> <item android:id="@+id/form2" android:icon="@drawable/attachment" android:title="Form 2" android:onClick="onSort" /> </menu> </item> </menu>

Pero, ¿cómo puedo agregar estos sub elementos a través del código de Java ? No funciona como se muestra a continuación, los elementos secundarios se agregan a la acción incorrecta (y tampoco se muestra el dibujo), el botón derecho, no el botón "Nuevo formulario":

main_menu.xml:

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_new_form" android:icon="@drawable/ic_new_form" android:title="@string/menu_new_form" android:showAsAction="ifRoom|withText"> </item> </menu>

Código de Java:

@Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); Log.d("MainMenu", ",menu title0: " + menu.getItem(0).getTitle()); // returns "New Form" menu.addSubMenu(0, Menu.NONE, 1, "Form 1").setIcon(R.drawable.attachment); menu.addSubMenu(0, Menu.NONE, 2, "Form 2").setIcon(R.drawable.attachment); return true; }

¿Hay alguna manera de lograr esto, agregar elementos del submenú a través de Java Code en lugar de XML, sin usar un PopupMenu ( http://developer.android.com/guide/topics/ui/menus.html#PopupMenu )?

Actualización (Solución):

Mi último fragmento de código terminé con para llenar el submenú dinámicamente, siguiendo la respuesta de adamp:

// menu options private static final int MENU_PREFERENCES = Menu.FIRST; private static final int MENU_LOGOUT = 2; @Override public boolean onCreateOptionsMenu(final Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); menu.add(0, MENU_PREFERENCES, 0, getString(R.string.general_preferences)).setIcon( android.R.drawable.ic_menu_preferences); // load all available form templates Cursor c = managedQuery(FormsProviderAPI.FormsColumns.CONTENT_URI, null, null, null, null); try { int ixDisplayName = c.getColumnIndex(FormsProviderAPI.FormsColumns.DISPLAY_NAME); int ixId = c.getColumnIndex(FormsProviderAPI.FormsColumns._ID); int cnt = 0; while (c.moveToNext()) { cnt++; Log.d("ID: ", "ID: "+ c.getInt(ixId)); // misusing the group id for the form id menu.getItem(1).getSubMenu().addSubMenu(c.getInt(ixId), Menu.NONE, cnt, c.getString(ixDisplayName)).setIcon(R.drawable.attachment_dark); } } catch (Exception e) { Log.e(TAG, "Error init form templates list.", e); } return true; }


Agregar un ActionProvider tal vez sea más fácil. Puedes probar como se explica aquí


Debes considerar usar un ActionProvider

ejemplo: https://gist.github.com/sibelius/7ca0b757492ff6740dec

Menú con elemento de proveedor de acción

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> <item android:id="@+id/action_companies" android:icon="@drawable/ic_list" android:title="@string/action_companies" app:actionProviderClass="com.example.MyActionProvider" app:showAsAction="always"/> </menu>

Código

public class MyActionProvider extends ActionProvider { private Context mContext; public MyActionProvider(Context context) { super(context); mContext = context; } @Override public View onCreateActionView() { //LayoutInflater layoutInflater = LayoutInflater.from(mContext); return null; } @Override public void onPrepareSubMenu(SubMenu subMenu) { super.onPrepareSubMenu(subMenu); subMenu.clear(); subMenu.add("menu 1"); subMenu.add("menu 2"); subMenu.add("menu 3"); } @Override public boolean hasSubMenu() { return true; } @Override public boolean onPerformDefaultAction() { return super.onPerformDefaultAction(); } }


Sí hay.

El método addSubMenu devuelve un objeto SubMenu . Un SubMenu también es un Menu , por lo que puede llamar add para agregar elementos al submenú en lugar del menú principal. Su código anterior crea dos submenús diferentes para el Formulario 1 y el Formulario 2 en lugar de dos elementos dentro de un solo submenú Formulario nuevo.

Ejemplo:

SubMenu submenu = menu.addSubMenu(0, Menu.NONE, 1, "New Form").setIcon(R.drawable.ic_new_form); submenu.add("Form 1").setIcon(R.drawable.attachment);