superior studio que poner opciones herramientas editar barra atributos acciones android overflow android-actionbar
conjunto de iconos de la barra de acción

que - poner toolbar android studio



La barra de acciones de Android no muestra desbordamiento (9)

Tengo una barra de acción en mi aplicación con 3 elementos.

Solo se pueden mostrar 2 debido a problemas de espacio, por lo que esperaría que el primero se muestre y el resto se muestre en el desbordamiento. Sin embargo, en la práctica, solo se muestran los primeros 2 elementos y no se detecta desbordamiento.

Aquí está el código relevante: list_menu.xml

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

Activity.java

public boolean onCreateOptionsMenu(Menu menu) { MenuInflater mi = getMenuInflater(); mi.inflate(R.menu.list_menu, menu); return true; }


Cuando dices menú "desbordamiento", ¿te refieres a los tres puntos que aparecen al final para indicar que hay más elementos ... o te refieres a la barra de acciones dividida que aparece en la parte inferior para los artículos desbordados?

Si se refiere a la barra de acción dividida, debe agregar esto al archivo de manifiesto de su actividad

android:uiOptions="splitActionBarWhenNarrow"

De forma predeterminada, el menú de desbordamiento de tres puntos debe suceder automáticamente, por lo que es difícil saber cuál es el problema a partir de la información que proporcionó anteriormente.


En dispositivos con botones de menú de hardware (Galaxy S3, terco como Samsung es ...) el menú de desbordamiento se comporta como el menú ''tradicional'', utilizando el botón de menú de hardware.


Intente cambiar el tema de la aplicación de Theme.AppCompat.Light.DarkActionBar a Theme.AppCompat.Light


Me doy cuenta de que este no es un menú de desbordamiento, pero es similar. De acuerdo, esto es simple pero fue difícil de entender.

Primero necesita un elemento de menú que desee usar como inflador de desbordamiento. Ejemplo

<item android:id="@+id/a_More" android:icon="@drawable/more" android:showAsAction="always" android:title="More"> </item>

Una vez que tenga su artículo, agregue un submenú que contenga los artículos que desea en el menú de desbordamiento. Ejemplo:

<item android:id="@+id/a_More" android:icon="@drawable/more" android:showAsAction="always" android:title="More"> <menu> <item android:id="@+id/aM_Home" android:icon="@drawable/home" android:title="Home"/> </menu> </item>

Al hacer clic, se inflarán otros elementos dentro. Mi aplicación está utilizando ActionBarSherlock 4.0, por lo que antes de que esto funcione para usted, tendrá que acceder a "SplitActionBar". (Aún funcionará en la barra de acciones android predeterminada)

Aquí le mostramos cómo hacerlo: en su archivo AndroidManifest.xml, debe agregar este código en la actividad en la que necesita el menú de desbordamiento.

android:uiOptions="splitActionBarWhenNarrow"

NOTA: Su artículo que infla su menú de desbordamiento DEBE showAsAction="always"

Vwola! tienes un menú de desbordamiento! Espero que te haya ayudado. :)


Para mostrar siempre desbordamiento de acción (tres puntos) en actionbarcompat:
en el archivo de menú, ejemplo:
main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_settings" android:title="@string/action_settings" app:showAsAction="never"/> <item android:id="@+id/action_about" android:title="@string/action_about" app:showAsAction="never"/> </menu>

y en archivo de actividad:

@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); }

Funcionó bien para mí.
Probado en Google Nexus S, Samsung S3.


Parece que en los dispositivos con un botón de menú, el menú de desbordamiento no se muestra en la barra de acciones. Además, no tenemos forma de saber si un dispositivo tiene un botón de menú de hardware antes del nivel de API 14 (4.0+).

Esta solución agrega un botón de desbordamiento a una android.support.v7.app.ActionBar que abre el menú de opciones estándar en pre-Honeycomb (<3.0) solamente, de lo contrario, lo deja al sistema. En cualquier caso, puede elegir entre always o ifRoom para todas las acciones.

Obtenga el icono de desbordamiento del paquete de iconos de la barra de acciones .

Agregue un menú (I''ompie algunas partes no relevantes como títulos, pedidos, etc.)

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_overflow" android:orderInCategory="100" android:icon="@drawable/ic_action_overflow" app:showAsAction="always" /> <item android:id="@+id/action_first" app:showAsAction="always" /> <item android:id="@+id/action_second" app:showAsAction="ifRoom" /> </menu>

Eliminar nuestra acción de desbordamiento en 3.0+

@Override public boolean onPrepareOptionsMenu(Menu menu) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { menu.removeItem(R.id.action_overflow); } return super.onPrepareOptionsMenu(menu); }

Finalmente, llame a Activity.openOptionsMenu() desde la acción de desbordamiento.

Er ... no. No puede llamar a openOptionsMenu() desde un botón de menú ... pero si usa AndroidAnnotations puede hacerlo fácilmente:

@OptionsItem void action_overflow() { openOptionsMenuDeferred(); } @UiThread void openOptionsMenuDeferred() { openOptionsMenu(); }

Si no, deberías hacer algo como esto, supongo

@Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == id.action_overflow) { openOptionsMenuDeferred(); return true; } } private Handler handler = new Handler(Looper.getMainLooper()); public void openOptionsMenuDeferred() { handler.post(new Runnable() { @Override public void run() { openOptionsMenu(); } } ); }


Ponga xmlns:your_app_name="http://schemas.android.com/apk/res-auto" dentro de la etiqueta del menú y en su lugar android:showAsAction="always" use your_app_name:showAsAction="always"

por ejemplo

<item android:id="@+id/action_search" android:icon="@drawable/icon_search" android:title="@string/search" your_app_name:showAsAction="ifRoom"/>


Si desea mostrar los tres puntos, ¡independientemente del botón de menú del dispositivo! luego puede llamar a este método en su clase de aplicación ''onCreate method-

private void makeActionOverflowMenuShown() { //devices with hardware menu button (e.g. Samsung Note) don''t show action overflow menu try { ViewConfiguration config = ViewConfiguration.get(this); Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); if (menuKeyField != null) { menuKeyField.setAccessible(true); menuKeyField.setBoolean(config, false); } } catch (Exception e) { Log.d(TAG, e.getLocalizedMessage()); } }


res / menu / menu.xml

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <!-- Search / will display always --> <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:showAsAction="always" android:title="@string/action_search"/> <!-- Location Found --> <item android:id="@+id/action_location_found" android:icon="@drawable/ic_action_location_found" android:showAsAction="always" android:title="@string/action_location_found"/> <!-- More --> <item android:id="@+id/a_More" android:icon="@drawable/ic_action_overflow" android:showAsAction="always" android:title="More"> <menu> <!-- Refresh --> <item android:id="@+id/action_refresh" android:icon="@drawable/ic_action_refresh" android:showAsAction="never" android:title="@string/action_refresh"/> <!-- Help --> <item android:id="@+id/action_help" android:icon="@drawable/ic_action_help" android:showAsAction="never" android:title="@string/action_help"/> <!-- Check updates --> <item android:id="@+id/action_check_updates" android:icon="@drawable/ic_action_refresh" android:showAsAction="never" android:title="@string/action_check_updates"/> </menu> </item> </menu>

MainActivity.java

public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return super.onCreateOptionsMenu(menu); } }

Descargue el conjunto de iconos de la barra de acción