2015-12-15 35 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

ツールバーを設定しますマニフェエスト、私はこの答えが役立つかもしれないと思う: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を持っていなかった

?私のgithubのプロジェクトを見てください

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

詳細を実装するアクションバーよりは、それが役立つことを願って:

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

ツールバーを使用する場合は、アクティビティのnoactbarスタイルを設定する必要があります。以下のような: '<スタイル名= "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; 
} 
関連する問題