2015-12-15 73 views
9

我在我的活動(import android.support.v7.widget.Toolbar;)中有一個工具欄,我試圖使用其主頁按鈕提供向上導航。我有什麼:如何通過工具欄上的主頁按鈕提供向上導航v7工具欄上

清單:

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

    <!-- ... --> 

我的onCreate方法:

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

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

setSupportActionBar(toolbar); 

到目前爲止,我不應該有一個按鈕,我不知道。所以我們很好。但是當我嘗試添加它時,我不能。

首先我嘗試這樣做:

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

沒有工作。 後來我想這(如圖所示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); 
} 
}); 

我甚至嘗試一種變通方法,我看到的地方,包括創建一個虛擬菜單,並試圖從onOptionsItemSelected事件(這是從來沒有的方式調用)。

我該怎麼辦?通過工具欄提供向上導航的正確方法是什麼?

+0

因爲你在聲明父活動manif EST,所以我認爲這個答案可能有所幫助:http://stackoverflow.com/a/12276100/719212 – R4j

+0

什麼類擴展你的活動? – Gonzalo

+0

@Gonzalo AppCompatActivity – TheCrafter

回答

0

據我所知,工具欄的後退按鈕被當作菜單項,所以如你所說,你應該重寫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

試過了。不工作。 'onOptionsItemSelected'永遠不會調用,正如我在我的帖子中所述。 – TheCrafter

0

我也有過這種問題。我懷疑include有問題。嘗試將id添加到工具欄包含佈局像

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

現在試圖讓使用incl_toolbar工具欄。

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

希望這會有所幫助。

問候,
SREE

9

你有下面的代碼來設置工具欄爲默認的活動動作條?

setSupportActionBar(toolbar); 

您沒有將圖像圖標設置爲主頁按鈕,可能會顯示,但您無法看到它。

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

和@Gonzalo說,你也必須覆蓋菜單中選擇事件處理家庭按鈕onClick事件

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

,爲什麼沒有你有appbarlayout包含的工具欄?

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

更多動作條實施細節,請看看我的github上的項目,希望它可以幫助:

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

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

+1

謝謝你的幫助。我嘗試使用'appbarlayout',但沒有奏效。此外,後面的圖標出現。我可以正常看到它,但我的按下沒有效果。 – TheCrafter

1

你可以不喜歡它這個。

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

試過了,沒有工作。 – TheCrafter

+0

如果你想使用工具欄,你應該設置你的活動noactionbar風格。如:'<樣式名稱= 「AppTheme.NoActionBar」> <項目名稱= 「windowActionBar」>假 <項目名稱= 「windowNoTitle」>真 ' –

+0

工具欄本身就是工作。問題在於主頁按鈕。工具欄已啓動並正在運行。 – TheCrafter

0

我找到了一個簡單的方法。根據期望完美運作。

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 - 你的工具欄

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

2 - 設置你的圖標

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

    } 

3-重寫此方法

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