2015-12-15 4 views
9

Ich habe eine Symbolleiste in meiner Aktivität (import android.support.v7.widget.Toolbar;) und ich versuche, Up Navigation mit seiner Home-Taste bereitzustellen. Was ich habe:Wie bieten Navigation nach oben mit Toolbar die Home-Taste auf der Symbolleiste 7

Manifest:

<!-- ... --> 
<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" /> 

    <!-- ... --> 

meine onCreate Methode:

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

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

setSupportActionBar(toolbar); 

Bis jetzt sollte ich keinen up-Button haben und ich nicht. Uns geht es also gut. Aber als ich versuchte, es hinzuzufügen, konnte ich nicht.

Zuerst habe ich versucht, dies:

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

nicht funktioniert. Dann habe ich versucht, diese (wie here gezeigt):

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); 
} 
}); 

ich auch eine Abhilfe habe ich versucht, irgendwo gesehen, an denen ein Dummy-Menü erstellen und versuchen, das Ereignis von onOptionsItemSelected zu bekommen (die nie von der Art und Weise genannt wird).

Was kann ich tun? Wie kann man die Navigation nach oben über die Symbolleiste korrekt bereitstellen?

+0

Da erklären Sie übergeordnete Aktivität auf manif est, also denke ich, dass diese Antwort helfen kann: http://stackoverflow.com/a/12276100/719212 – R4j

+0

Welche Klasse erweitert Ihre Aktivität? – Gonzalo

+0

@Gonzalo AppCompatActivity – TheCrafter

Antwort

0

Soweit ich weiß, die Zurück-Schaltfläche der Symbolleiste wird als ein Menüelement behandelt, so wie Sie sagen, sollten Sie die onOptionsItemSelected überschreiben.

@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

Versuchte es. Funktioniert nicht. Der 'onOptionsItemSelected' ist nie Aufruf, wie ich in meinem Beitrag festhalte. – TheCrafter

0

Ich hatte auch diese Art von Problem früher. Ich vermute, dass mit include etwas los ist. Versuchen Sie, eine id in die Symbolleiste hinzufügen enthalten Layout wie

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

Und jetzt versuchen, die Symbolleiste zu erhalten mit incl_toolbar.

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

Hoffe, das hilft.

Grüße,
Sree

9

Haben Sie den Code unten haben Ihre Symbolleiste als Standard Aktivität ActionBar gesetzt?

Sie haben kein Bildsymbol auf die Home-Taste gesetzt, vielleicht wird es angezeigt, aber Sie können es einfach nicht sehen.

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

und als @Gonzalo sagte, können Sie auch das Menü wählen Sie Ereignis außer Kraft setzen müssen, um die Home-Taste onClick Ereignis

@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); 
} 

und warum Sie eine appbarlayout die Symbolleiste enthalten haben nicht zu handhaben?

<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> 

Mehr ActionBar Details zu implementieren bitte einen Blick auf meine GitHub Projekt haben, hoffen, dass es helfen kann:

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

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

+1

Vielen Dank für Ihre Hilfe. Ich habe versucht, das 'appbarlayout' zu verwenden, aber es hat nicht funktioniert. Außerdem erscheint das Zurück-Symbol. Ich kann es normal sehen, aber mein Drücken hat keine Wirkung. – TheCrafter

1

Sie können es tun, wie Dies.

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

Versucht es, funktioniert nicht. – TheCrafter

+0

Wenn Sie die Symbolleiste verwenden möchten, sollten Sie den NoActionbar-Stil Ihrer Aktivität festlegen. Wie zum Beispiel: '' –

+0

Die Symbolleiste selbst arbeitet. Das Problem ist mit der Home-Taste. Die Symbolleiste ist betriebsbereit. – TheCrafter

0

Ich fand einen einfachen Weg. Was perfekt nach den Erwartungen funktioniert.

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- setzen Ihre Symbolleiste

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

2- Setup Ihr ​​Symbol

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

    } 

3- überschreiben diese Methode

@Override 
public boolean onSupportNavigateUp() { 
    onBackPressed(); 
    return true; 
} 
Verwandte Themen