2015-12-15 36 views
9

Nella mia attività ho una barra degli strumenti (import android.support.v7.widget.Toolbar;) e sto tentando di fornire la navigazione in alto utilizzando il pulsante di casa. Quello che ho:Come fornire la navigazione in alto con il pulsante home della barra degli strumenti sulla barra degli strumenti v7

manifesto:

<!-- ... --> 
<activity android:name=".SettingsActivity" 
      android:label="@string/settings" 
      android:parentActivityName=".MainActivity"/> 
<!-- ... --> 

view_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:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:fitsSystemWindows="true" 
    android:minHeight="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    android:elevation="4dp"> 
</android.support.v7.widget.Toolbar> 

activity_settings.xml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    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="match_parent"> 

    <!-- Toolbar --> 
    <include 
     layout="@layout/view_toolbar" /> 

    <!-- ... --> 

mio metodo onCreate:

super.onCreate(bundle) 
setContentView(R.layout.activity_settings); 

// Set the toolbar 
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 

setSupportActionBar(toolbar); 

Finora non dovrei avere un pulsante su e io no. Quindi stiamo bene. Ma quando ho provato ad aggiungerlo, non potevo.

Per prima cosa ho provato questo:

getSupportActionBar().setDisplayShowHomeEnabled(true); 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

non ha funzionato. Poi ho provato questo (come mostrato here):

toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
    Toast.makeText(ToolbarActivity.this, "Up clicked", 
     Toast.LENGTH_SHORT).show(); 
    NavUtils.navigateUpFromSameTask(ToolbarActivity.this); 
} 
}); 

ho anche provato una soluzione che ho visto da qualche parte, che coinvolge la creazione di un menù fittizio e cercando di ottenere l'evento da onOptionsItemSelected (che non viene mai chiamato tra l'altro).

Cosa posso fare? Qual è il modo corretto di fornire la navigazione verso l'alto attraverso la barra degli strumenti?

+0

Perché si dichiara l'attività genitore su manif est, quindi penso che questa risposta può aiutare: http://stackoverflow.com/a/12276100/719212 – R4j

+0

Che classe estende la tua attività? – Gonzalo

+0

@Gonzalo AppCompatActivity – TheCrafter

risposta

0

Per quanto ne so, il pulsante Indietro della barra degli strumenti viene considerato come una voce di menu, così come dici tu dovresti sostituire lo onOptionsItemSelected.

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    // Respond to the action bar's Up/Home button 
    case android.R.id.home: 
     //Home/back button 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

Provato. Non funziona. Il 'onOptionsItemSelected' non viene mai chiamato, come dichiaro nel mio post. – TheCrafter

0

Anch'io ho avuto questo tipo di problema in precedenza. Sospetto che stia succedendo qualcosa con include. Tenta di aggiungere un id alla barra degli strumenti di layout incluso come

<include 
    layout="@layout/view_toolbar" 
    id = "@+id/incl_toobar"/> 

E ora cercare di ottenere la barra degli strumenti utilizzando incl_toolbar.

Toolbar toolbar = (Toolbar) findViewById(R.id.incl_toolbar); 

Spero che questo aiuti.

saluti,
Sree

9

Hai avuto il codice qui sotto per impostare la barra degli strumenti come l'ActionBar attività di default?

setSupportActionBar(toolbar); 

Non hai impostato un'icona immagine sul pulsante Home, forse viene visualizzata, ma non puoi vederla.

getSupportActionBar().setHomeAsUpIndicator(iconDrawable); 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

e, come ha detto @Gonzalo, si hanno anche per ignorare la manifestazione di selezione di menu per gestire il tasto home onclick evento

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    // Respond to the action bar's Up/Home button 
    case android.R.id.home: 
     //handle the home button onClick event here. 
     return true; 
    case android.R.id.other_menu 
     return true 
    } 

    return super.onOptionsItemSelected(item); 
} 

e perché non aveva un appbarlayout per contenere la barra degli strumenti?

<android.support.design.widget.AppBarLayout 
     android:id="@+id/baseAppbarLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/baseToolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:layout_scrollFlags="scroll|enterAlways" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

</android.support.design.widget.AppBarLayout> 

Maggiori ActionBar implementare i dettagli si prega di dare un'occhiata al mio progetto GitHub, spero che possa aiutare:

codice Java https://github.com/DanielShum/MaterialAppBase/blob/master/materialAppBaseLibrary/src/main/java/com/daililol/material/appbase/base/BaseActionbarActivity.java

codice XML https://github.com/DanielShum/MaterialAppBase/blob/master/materialAppBaseLibrary/src/main/res/layout/base_actionbar_activity.xml

+1

Grazie per il vostro aiuto. Ho provato ad usare 'appbarlayout' ma non ha funzionato. Inoltre, viene visualizzata l'icona posteriore. Posso vederlo normalmente ma la mia pressione non ha alcun effetto. – TheCrafter

1

Si può fare come Questo.

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
toolbar.setTitle(R.string.title); 
toolbar.setNavigationIcon(R.mipmap.back); // just setNavigationIcon 
setSupportActionBar(toolbar); 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     // Respond to the toorbar's NavigationIcon as up/home button 
     case android.R.id.home: 
      //NavigationIcon 
      return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

Provato, non funziona. – TheCrafter

+0

Se si desidera utilizzare la barra degli strumenti, è necessario impostare lo stile di noactionbar di Activity. Come ad esempio: '' –

+0

La barra degli strumenti in sé funziona. Il problema è con il tasto home. La barra degli strumenti è attiva e funzionante. – TheCrafter

0

Ho trovato un modo semplice. Che funziona perfettamente in base alle aspettative.

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_id); 
    toolbar.setTitleTextColor(Color.WHITE); 
    toolbar.setTitle(getResources().getString(R.string.your_title)); 
    toolbar.setNavigationIcon(R.mipmap.back_btn); 
    setSupportActionBar(toolbar); 

    toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      onBackPressed(); // byDefault provided backPressed method, or handle your own way 
     } 
    }); 
3

1- impostare la toolbar

Toolbar toolbar = findViewById(R.id.toolbar);

2- messa a punto la tua icona

if (toolbar != null) { 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setHomeButtonEnabled(true); 

    } 

3- ignorare questo metodo

@Override 
public boolean onSupportNavigateUp() { 
    onBackPressed(); 
    return true; 
} 
Problemi correlati