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