studio icon example custom bar actionbar android appcompat android-actionbar-compat android-toolbar

icon - toolbar android example



Cómo habilitar homeAsUp o llamar a setDisplayHomeAsUpEnabled() en la barra de herramientas independiente con appcompat v21 (7)

Defina un fondo 9patch para su barra de herramientas;) es un trabajo. Aquí está toolbar_background.9.png

<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/toolbar_background"> .....

Intento convertir mi aplicación para usar la biblioteca v21 AppCompat, así que comencé a utilizar la barra de herramientas en lugar de ActionBar. En todas mis actividades habituales (que extienden ActionBarActivity) todo está bien. pero en mi SettingsActivity que extiende PreferenceActivity, y por lo tanto no puedo usar la llamada setSupportActionBar (barra de acciones), necesito usar una barra de herramientas "independiente". La barra de herramientas aparece, pero no puedo entender cómo podría agregar el botón "Inicio / Arriba" a la barra de herramientas.

SettingsActivity.java:

public class SettingsActivity extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_settings); Toolbar actionbar = (Toolbar) findViewById(R.id.actionbar); if (null != actionbar) { // In every other activity that extends ActionBarActivity I simply use: // setSupportActionBar(actionbar); // final ActionBar supportActionBar = getSupportActionBar(); // supportActionBar.setDisplayHomeAsUpEnabled(true); // but in PreferenceActivity you need to add a standalone toolbar: actionbar.setTitle(R.string.title_activity_settings); actionbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SettingsActivity.this.finish(); } }); // Inflate a menu to be displayed in the toolbar actionbar.inflateMenu(R.menu.settings); } } }

layout / activity_settings.xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context=".SettingsActivity" tools:menu="settings" tools:actionBarNavMode="standard" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/actionbar" android:layout_width="match_parent" android:layout_height="wrap_content"/> <ListView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@android:id/list" /> </LinearLayout>

layout / actionbar.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:id="@+id/actionbar" android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimaryDark" app:theme="@style/AppTheme" />

menu / settings.xml:

<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" tools:context="com.fletech.android.redalert.SettingsActivity" > </menu>

Intenté agregar actionBarStyle y displayOptions a mi tema, tal como se explica en el botón Mostrar / Volver en la PreferenceScreen anidada de Android. , pero en otros lugares las personas dijeron que actionBarStyle no se usará cuando use la barra de herramientas, y parece que son correctas.

values ​​/ themes.xml:

<?xml version="1.0" encoding="utf-8"?> <resources> <style name="AppTheme" parent="AppTheme.Base"/> <style name="AppTheme.Base" parent="Theme.AppCompat"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimary</item> <item name="android:windowNoTitle">true</item> <item name="windowActionBar">false</item> <item name="windowActionModeOverlay">true</item> <!-- Set AppCompat’s actionBarStyle --> <item name="actionBarStyle">@style/MyActionBar</item> </style> <style name="MyActionBar" parent="Widget.AppCompat.ActionBar"> <item name="displayOptions">showHome|homeAsUp|showTitle</item> </style> <resources>


Gracias por la solución, el único punto para agregar es que es mejor usar

NavUtils.navigateUpFromSameTask(SettingsActivity.this);


La solución de @Pedro Oliveira funcionó. Incluso podría encontrar el dibujable que utiliza la biblioteca AppCompat (y, por lo tanto, ya está incluido en la apk). ¿Qué más también se refleja, por lo que funciona tanto para ltr, rtl locales:

actionbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);

y esto es todo junto, con la corrección de @VictorYakunin

public class SettingsActivity extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_settings); Toolbar actionbar = (Toolbar) findViewById(R.id.actionbar); if (null != actionbar) { actionbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha); actionbar.setTitle(R.string.title_activity_settings); actionbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { NavUtils.navigateUpFromSameTask(SettingsActivity.this); } }); // Inflate a menu to be displayed in the toolbar actionbar.inflateMenu(R.menu.settings); } } }


Pruebe el atributo XML android: navigationIcon, o la aplicación: navigationIcon para API anterior a 21.


Si proporciona el nombre de actividad principal en Manifest.xml y metadatos para admitir Android 4.0 y toolbar.setNavigationIcon(R.drawable.ic_action_back); inferiores, puede simplemente establecer el icono de navegación ( toolbar.setNavigationIcon(R.drawable.ic_action_back); ) y funcionará.

Ejemplo de Manifest.xml:

<activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ProductActivity" android:label="@string/title_activity_product" android:parentActivityName=".MainActivity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity>


Yout puede usar ?homeAsUpIndicator lugar de R.drawable.abc_ic_ab_back_mtrl_am_alpha :

<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?colorPrimary" android:theme="@style/ThemeOverlay.AppCompat.ActionBar" app:navigationIcon="?homeAsUpIndicator" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:title="@string/title" />


forma de llegar tarde a la fiesta aquí, pero todavía proporcionaré mi 0.02 $. Lo hice de la siguiente manera para mostrar la flecha hacia arriba en fragment usando AppCompactActivity

((MainActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);

y maneje el evento onClick dentro de su actividad onOptionsItemSelected