Androidの設定画面にツールバーを表示してみた2

# 概要
[前回の投稿](https://qiita.com/kyamawaki/items/b3f097e578703cd833dc)では、プリファレンスヘッダーに対してツールバーを追加したのですが、本当に欲しかったのは単なる設定画面にヘッダーを追加でした。なんとか実現できたので、今回はその方法について記述します。

![Setting.png](https://qiita-image-store.s3.amazonaws.com/0/41649/79d10e18-f034-9e0e-8f02-075da7a3c3b4.png)

# 環境
IDE：Android Studio 3.0.1
ターゲット：marshmallow以降

# 実現方法について
## 概略
1. 設定画面用ActivityをPreferenceActivity でなくAppCompatActivityから派生させる。
2. リソースにLinearLayoutを追加し、そこにToolbarとFrameLayoutを追加する。
3. Activity作成時にツールバーをアクションバーに設定。
4. Activity作成時にFrameLayoutのフラグメントをPreferenceFragmentで置き換える。

## ソース
```
SettingsActivity.java

public class SettingsActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);

        // initialize toolbar
        this.initializeToolBar();

        // Display the fragment as the main content.
        getFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, new SettingsActivity.SettingsFragment())
                .commit();

    }

    private void initializeToolBar() {
        Toolbar toolbar = (Toolbar) findViewById(R.id.settingsToolbar);
        setSupportActionBar(toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });

        // 戻るボタンの追加
        ActionBar actionBar = this.getSupportActionBar();
        if (actionBar == null) {
            return;
        }
        actionBar.setDisplayHomeAsUpEnabled(true);
    }

    public static class SettingsFragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            // Load the preferences from an XML resource
            addPreferencesFromResource(R.xml.pref_settings);
        }
    }
}
```

```
res/layout/activity_settings.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"

    ・・・
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:id="@+id/settingsToolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:elevation="4dp"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="?attr/actionBarTheme" />

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
    </LinearLayout>
</android.support.design.widget.CoordinatorLayout>
```

## 感想
[今回、参考にしたページ](https://stackoverflow.com/questions/39200846/how-to-add-toolbar-in-preferenceactivity)で、感心したところは、LinearLayoutでツールバーとフレームレイアウトを配置し、フレームレイアウトのフラグメントをPreferenceFragment と置換したところですね。多くのサンプルはandroid.R.id.contentを置換することが多く、ツールバーの下から設定を表示することが、なかなかできなかったので。コードが動いて、やってることが理解できたときは、かなり嬉しかったです。

# 参考
https://stackoverflow.com/questions/39200846/how-to-add-toolbar-in-preferenceactivity