personalizar - Cómo configurar el menú a la barra de herramientas en Android
como activar la barra de notificaciones en android (9)
No use setSupportActionBar (barra de herramientas)
No sé por qué, pero esto funciona para mí.
toolbar = (Toolbar) findViewById(R.id.main_toolbar);
toolbar.setSubtitle("Test Subtitle");
toolbar.inflateMenu(R.menu.main_manu);
Para el elemento del menú, haga clic en hacer esto
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
if(item.getItemId()==R.id.item1)
{
// do something
}
else if(item.getItemId()== R.id.filter)
{
// do something
}
else{
// do something
}
return false;
}
});
Actualizaré la parte ''por qué'' de esta respuesta cuando encuentre una explicación adecuada.
Feliz de ayudar de todos modos :) Paz.
¡Quiero usar
ToolBar
lugar de
ActionBar
, pero no me muestre el menú en la barra de herramientas!
Quiero configurar el menú, como
Actualizar
o
Configurar
botones en
ActionBar
.
Código Toolbar.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
app:navigationContentDescription="@string/abc_action_bar_up_description"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:title="Main Page"
android:gravity="center"/>
Código MainPage.java:
public class MainPage extends AppCompatActivity {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_page);
toolbar = (Toolbar) findViewById(R.id.main_toolbar);
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setTitle("Main Page");
}
toolbar.setSubtitle("Test Subtitle");
toolbar.inflateMenu(R.menu.main_manu);
}
}
Código main_menu.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_main_setting"
android:icon="@drawable/ic_settings"
android:orderInCategory="100"
app:showAsAction="always"
android:actionLayout="@layout/toolbar"
android:title="Setting" />
<item
android:id="@+id/menu_main_setting2"
android:icon="@drawable/ic_settings"
android:orderInCategory="200"
app:showAsAction="always"
android:actionLayout="@layout/toolbar"
android:title="Setting" />
</menu>
¿Cómo solucionar este problema y mostrar el menú en la
Toolbar
de
Toolbar
?
gracias a todos queridos <3
Aquí hay una respuesta más completa como referencia para futuros visitantes. Por lo general, uso una barra de herramientas de soporte, pero funciona igual de cualquier manera.
1. Hacer un menú xml
Esto va a estar en
res/menu/main_menu
.
-
Haga clic derecho en la carpeta
res
y elija Nuevo> Archivo de recursos de Android . -
Escriba
main_menu
para el nombre del archivo. - Elija Menú para el Tipo de recurso.
Pegue el siguiente contenido como entrante.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_add"
android:icon="@drawable/ic_add"
app:showAsAction="ifRoom"
android:title="Add">
</item>
<item
android:id="@+id/action_settings"
app:showAsAction="never"
android:title="Settings">
</item>
</menu>
Puede hacer clic con el botón derecho en
res
y elegir
Nuevo recurso de imagen
para crear el icono
ic_add
.
2. Inflar el menú
En su actividad agregue el siguiente método.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
3. Manejar los clics del menú
También en su Actividad, agregue el siguiente método:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.action_add:
addSomething();
return true;
case R.id.action_settings:
startSettings();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Otras lecturas
Aunque estoy de acuerdo con esta respuesta, ya que tiene menos líneas de código y funciona:
Cómo configurar el menú a la barra de herramientas en Android
Mi sugerencia sería iniciar siempre cualquier proyecto utilizando el Asistente de Android Studio. En ese código encontrarás algunos estilos: -
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
y el uso es:
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
Debido a que
no action bar theme
declarado
no action bar theme
en
styles.xml
, que se aplica a la
Main Activity
en
AndroidManifest.xml
, no hay excepciones, por lo que debe verificarlo allí.
<activity android:name=".MainActivity" android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
-
La
Toolbar
no es una entidad independiente, siempre es una vista secundaria enAppBarLayout
que nuevamente es hija deCoordinatorLayout
. - El código para crear un menú es el código estándar desde el primer día, que se repite una y otra vez en todas las respuestas, particularmente la marcada, pero nadie se dio cuenta de cuál es la diferencia.
AMBOS:
Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar);
Y:
Cómo configurar el menú a la barra de herramientas en Android
TRABAJARÁ.
Happy Coding :-)
En mi caso, estoy usando un AppBarLayout con un CollapsingToolbarLayout y el menú siempre se desplazaba fuera de la pantalla, resolví mi problema cambiando android: actionLayout en el XML del menú a la ID de la barra de herramientas. ¡Espero que pueda ayudar a las personas en la misma situación!
activity_main.xml
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:fab="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.MainScreenActivity"
android:screenOrientation="portrait">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="300dp"
app:elevation="0dp"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsingBar"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="exitUntilCollapsed|scroll"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginStart="48dp"
app:expandedTitleMarginEnd="48dp"
>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:elevation="0dp"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:layout_collapseMode="pin"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
main_menu.xml
<?xml version="1.0" encoding="utf-8"?> <menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/logoutMenu"
android:orderInCategory="100"
android:title="@string/log_out"
app:showAsAction="never"
android:actionLayout="@id/toolbar"/>
<item
android:id="@+id/sortMenu"
android:orderInCategory="100"
android:title="@string/sort"
app:showAsAction="never"/> </menu>
En su actividad, anule este método.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
Esto inflará tu menú a continuación:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_main_setting"
android:icon="@drawable/ic_settings"
android:orderInCategory="100"
app:showAsAction="always"
android:actionLayout="@layout/toolbar"
android:title="Setting" />
<item
android:id="@+id/menu_main_setting2"
android:icon="@drawable/ic_settings"
android:orderInCategory="200"
app:showAsAction="always"
android:actionLayout="@layout/toolbar"
android:title="Setting" />
</menu>
Necesita anular este código en su Actividad:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu, this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main2, menu);
return true;
}
y configura tu barra de herramientas de esta manera:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
También necesita esto, para implementar alguna acción en cada opción de menú.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_help:
Toast.makeText(this, "This is teh option help", Toast.LENGTH_LONG).show();
break;
default:
break;
}
return true;
}
Una solución simple a esto fue configurar
showAsAction
para
always
en
menu.xml
en res / menu
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/add_alarm"
android:icon="@drawable/ic_action_name"
android:orderInCategory="100"
android:title="Add"
app:showAsAction="always"
android:visible="true"/>
</menu>
simplemente anule onCreateOptionsMenu como este en su MainPage.java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}