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