この記事は「みんコミ Advent Calendar」の5日目の記事です。

みんコミ」のAndroidアプリ(バージョン1.0.1)をベースに執筆しています。スクリーンショットは極力控える方針ですので、本記事を読む際には、「Google Play Store」からアプリをインストールしておくことをお勧めします。

en_generic_rgb_wo_60


ホーム画面からメニューの「その他」をタップすると、設定画面が表示されますが、この画面が独自の画面として実装されているのが気になりました。

この内容だとPreferenceを使った方が実装もメンテナンスも簡単で、見た目もAndroid標準に則っていてユーザーに混乱を与えないと思います。

http://developer.android.com/intl/ja/guide/topics/ui/settings.html

mincomi_pref1

mincomi_pref2

メニューの初期画面「pref_general.xml」は次の通りです。

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

    <PreferenceCategory
        android:title="サービスにログイン">
        <Preference
            android:title="ログイン"/>
        <Preference
            android:title="会員登録"/>

    </PreferenceCategory>

    <PreferenceCategory
        android:title="その他">
        <Preference
            android:title="お知らせ"/>
        <Preference
            android:key="various"
            android:title="設定"/>
        <Preference
            android:title="ヘルプ"/>
        <Preference
            android:title="お問い合わせ"/>
        <Preference
            android:title="サービスについて"/>
        <Preference
            android:title="利用規約"/>
        <Preference
            android:title="個人情報保護指針"/>

    </PreferenceCategory>

</PreferenceScreen>

実際にはそれぞれのPreferenceから別の画面に遷移することになります。

本来であれば、Preferenceのandroid:fragment属性でPreferenceをタップした際に遷移するFragmentを指定できるのですが、それが有効なのは読み込むActivityがPreferenceActivityを継承している場合です。

今回、SettingActivityは、Design Support Libraryとの兼ね合いでAppCompatActivityを継承しているため、OnPreferenceClickListenerで処理しています。

    public static class GeneralSettingFragment extends PreferenceFragment
            implements Preference.OnPreferenceClickListener {

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            addPreferencesFromResource(R.xml.pref_general);

            findPreference("various").setOnPreferenceClickListener(this);
        }

        public static GeneralSettingFragment newInstance() {
            return new GeneralSettingFragment();
        }

        @Override
        public boolean onPreferenceClick(Preference preference) {

            switch (preference.getKey()) {
                case "various":
                    getFragmentManager()
                            .beginTransaction()
                            .addToBackStack(OtherSettingFragment.class.getSimpleName())
                            .replace(android.R.id.content, OtherSettingFragment.newInstance(),
                                    OtherSettingFragment.class.getSimpleName())
                            .commit();
                    break;
            }

            return false;
        }
    }

「その他 – 設定」をタップしたときに別の画面に遷移するようにしています。

表示する「pref_other.xml」は次の通りです。

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

    <Preference
        android:summary="一時保存のデータを削除して空き容量を増やします"
        android:title="キャッシュのクリア"/>

    <SwitchPreference
        android:key="notification"
        android:summary="お気に入りの作品が更新されたときに通知でお知らせします"
        android:title="通知"/>

    <Preference
        android:key="version"
        android:title="バージョン情報"/>

</PreferenceScreen>

さて、Preferenceで作った画面に「最終閲覧」がないことにお気づきかと思います。

「最終閲覧」は、Preferenceを頑張ってカスタマイズすれば(おそらく)表示できます。今回、僕がそれをしていない理由は、一つはPreferenceのカスタマイズは作業の負荷が高くなりがちなこと、また、個人的に「最終閲覧」の表示は「その他」ではなく、ホーム画面にあった方が良いと思うからです。

Huluなどでも視聴中の番組は、まずトップ画面に出てきます。アプリを起動してすぐに表示されるホーム画面に表示した方がユーザーの目に留まりやすいと考えます。

サンプルプロジェクトをGitHubに置いておきます。

https://github.com/keiji/adventcalendar_2015_mincomi


「有山圭二」は「みんなのコミック」及び運営の「株式会社イーブックイニシアティブジャパン」とは一切関係がありません。
また、本アドベントカレンダーの内容はあくまで参加者個人の見解です。
「みんなのコミック」の評価を目的とするものではありませんので、ご了承下さい。

みんコミといえば、僕が普段からお世話になっている根雪れい(@neyuki_rei)さんも連載していますね。

根雪さんの「おかあさん(10)と僕。」は……まだ更新されていませんか。そうですか。

それでは代わりにもう一つ、「みんコミ」で気になっている作品を紹介します。

「子育てもの」というジャンルは、自分がその立場になってみないと、なかなか面白さがわからないものですね……。

わかります。ええ、わかりますとも。


それでは明日、6日の担当は、今月で1才の誕生日を迎える息子さんが、最近、アニメの「ゆるゆり」にハマっていて、さっそく将来が心配になっている「有山圭二」さんです。

よろしくお願いいたします。