Androidアプリ開発 Preference 下線を非表示にする

2016年11月14日(編集2016年11月14日)
このエントリーをはてなブックマークに追加

Androidアプリ開発で設定画面を作成するときは、Preferenceクラスを使用します。
この記事は、Preferenceで作成した設定画面の下線を削除する方法を記載した記事です。

環境はAndroid 7.1 (API level 25) です。

環境

  • OS X El Capitan
  • android sdk 25
  • Oracle jdk version 1.8.0_72
  • Android Studio 2.2.2

難易度

初心者向け

サンプルコード

Android-Material-Design-Demo

Preferenceの下線

Preferenceはアプリの設定画面を作成するために用意されたクラスです。

preference

Preferenceは、PreferenceFragmentCompatクラスで設定画面を作成します。作成された設定画面は、デフォルトで下線が表示されます。

preference

この下線は実装で削除することができます。

PreferenceFragmentCompat

実装は、PreferenceFragmentCompatでしていることが前提になります。
PreferenceFragmentCompatの一覧表示は、RecycerViewで実装されています。

なので、RecyclerViewの削除処理と同じ実装で、PreferenceFragmentCompatで作成された画面の下線を削除することができます。

実装

では、下線を削除する実装をしましょう。
サンプルコードには、この記事で作成したコードを利用します。

{project_folder}/ui/PubSubActivity.java
public class PreferenceDemoFragment extends PreferenceFragmentCompat {

    private OnFragmentInteractionListener mListener;

    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        // Load the preferences from an XML resource
        setPreferencesFromResource(R.xml.preferences, rootKey);
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    public interface OnFragmentInteractionListener {}
}
        

以下のコードを追記します。

{project_folder}/ui/PubSubActivity.java
public class PreferenceDemoFragment extends PreferenceFragmentCompat {

    private OnFragmentInteractionListener mListener;

    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        // Load the preferences from an XML resource
        setPreferencesFromResource(R.xml.preferences, rootKey);
    }

   +@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = super.onCreateView(inflater, container, savedInstanceState);

        // delete under line
        setDivider(new ColorDrawable(Color.TRANSPARENT));
        setDividerHeight(0);

        return view;
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    public interface OnFragmentInteractionListener {}
}
        

■ 実装の解説

1. 下線削除

下線削除処理は、onCreateViewメソッドをオーバーライドして、以下のコードを追記します。

// delete under line
setDivider(new ColorDrawable(Color.TRANSPARENT));
setDividerHeight(0);
        

透明で高さ0の下線を設定しています。

onCreateViewメソッドで処理を呼び出しているのは、PreferenceFragmentCompatクラスがonCreateViewメソッド内でRecyclerViewのオブジェクトを生成しているからです。
なので、上記のコードをonCreatePreferencesメソッドで呼び出すと、アプリはクラッシュします。

ビルドと実行

実装を終えたら、ビルドしてアプリを実行します。

preference

Preference画面から下線がなくなりました。

まとめ

PreferenceFragmentCompatで利用しているリスト表示はRecyclerViewクラスです。
このことを知っておくと、色々と応用できるので、覚えておきましょう。

関連記事

タグ検索で調べてみよう

Android7.0 UI