Per qualche motivo, qualcuno in Google ha deciso che questi dovevano diventare no-op. Questo può essere visto sotto.
ToolbarWidgetWrapper.java
@Override
public void setHomeButtonEnabled(boolean enable) {
// Ignore
}
ToolbarActionBar.java
@Override
public void setHomeButtonEnabled(boolean enabled) {
// If the nav button on a Toolbar is present, it's enabled. No-op.
}
E sembra come se ToolbarWidgetWrapper che viene utilizzato per mappare la barra degli strumenti per ActionBar differenze tratta l'icona Nav nella barra degli strumenti come la 'casa Come indicatore alto '. Quindi solo quella parte è cliccabile. Il nuovo logo che puoi impostare su Toolbar non può mai essere cliccabile. Non hanno nemmeno esposto la vista, è private
rotoli-occhi.
Così il primo lavoro intorno è se non si utilizza il 'casa Come Up' funzione o si è disposti a combinare il tuo up drawable con la vostra casa drawable allora si potrebbe semplicemente impostare l'attributo android:homeAsUpIndicator
nel vostro android:actionBarStyle
con android:displayOptions="homeAsUp"
.
<style name="AppBaseTheme" parent="@android:style/Theme.Material.Light.DarkActionBar">
<item name="android:actionBarStyle">@style/ActionBar</item>
</style>
<style name="ActionBar" parent="@android:style/Widget.Material.Light.ActionBar.Solid">
<item name="android:background">@color/action_bar_bg</item>
<item name="android:displayOptions">homeAsUp</item>
<item name="android:homeAsUpIndicator">@drawable/app_logo</item>
</style>
Ovviamente questa stessa cosa può essere eseguita con il codice.
getActionBar().setHomeAsUpIndicator(R.drawable.app_logo);
getActionBar().setDisplayHomeAsUpEnabled(true);
Ma questo significa che non verrà visualizzato mentre l'attività viene effettivamente caricata. Quindi meglio andare con l'opzione tematica.
La terza opzione che sarebbe meglio è solo per lo stile del pulsante di navigazione per la nuova vista Toolbar. Che usa android:navigationButtonStyle
ma indovina cosa ... non hanno reso pubblico quello. Credo che questo sia un errore geninue, ma tutto questo inizia a somigliare ai problemi originali che tutti abbiamo avuto con ActionBar in primo luogo.
Quindi, è possibile aggirare il problema. Ok proviamo a impostare lo android:navigationIcon
nello android:toolbarStyle
. No. Ok, proviamo tutte le altre possibili variazioni che puoi immaginare includendo android:actionBarStyle
e android:actionBarTheme
. No. Ciò che mi aspetto è che il navigationIcon sia sovrascritto in un punto del pasticcio ActionBar/Activity/Toolbar predefinito. Non riesco a disturbarmi per individuare dove e aggirare il problema.
Ok, quindi finalmente scegliamo l'opzione più flessibile. Rilascia il pulsante Home predefinito e usa il nostro implementando la funzionalità di navigazione personalizzata precedente. Questo significa che se usi già un nav personalizzato dovrai combinare il tuo nav con questo.
valori-v21/stili.xml
<style name="AppBaseTheme" parent="@android:style/Theme.Material.Light.DarkActionBar">
<item name="android:actionBarStyle">@style/ActionBar</item>
</style>
<style name="ActionBar" parent="@android:style/Widget.Material.Light.ActionBar.Solid">
<item name="android:background">@color/action_bar_bg</item>
<item name="android:displayOptions">showCustom</item>
<item name="android:customNavigationLayout">@layout/nav_layout</item>
</style>
Layout-V21/nav_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start|center_vertical"
android:layout_marginEnd="8dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:adjustViewBounds="true"
android:background="?android:attr/actionBarItemBackground"
android:contentDescription="@string/ab_home_description"
android:src="@drawable/app_logo"
android:scaleType="fitCenter"
/>
Nella classe di attività/BaseActivity aggiungere la seguente. E questo falsificherà il pulsante home.
@Override
public boolean onPrepareOptionsMenu(final Menu menu)
{
prepareOptionsMenuLollipop(menu);
return super.onPrepareOptionsMenu(menu);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void prepareOptionsMenuLollipop(Menu menu)
{
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
final MenuItem homeItem = menu.add(Menu.NONE, android.R.id.home,
Menu.NONE, R.string.ab_home_description);
homeItem.setVisible(false);
View homeView = getActionBar().getCustomView().findViewById(android.R.id.home);
homeView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v)
{
getWindow().getCallback().onMenuItemSelected(Window.FEATURE_OPTIONS_PANEL, homeItem);
}
});
}
}
Si sta utilizzando ActionBar standard o Barra degli strumenti come barra delle azioni? – dhuma1981
Standard ActionBar – TommyNecessary
Che funzionalità ti aspetti dal pulsante Home? Per funzionare come pulsante su o forse un interruttore a cassetto? Pubblica un po 'di codice e il tema che stai utilizzando. – Simas