[Preference]項目をタップしたらURLを開く方法

こういう風に

  1. PreferenceFragmentCompatの設定項目をタップ
  2. 指定したURLを外部ブラウザで開く

みたいなやつを実現する方法のメモ。

方法は2つあるみたいです。

XMLで設定する方法

まずXMLで指定する方法。

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <PreferenceCategory app:title="テスト">
        <Preference
            android:key="google"
            android:summary="タップするとGoogleが開きます。"
            android:title="Googleを開く">
            <intent
                android:action="android.intent.action.VIEW"
                android:data="http://www.google.com" />
        </Preference>
        <Preference
            android:key="yahoo"
            android:summary="タップするとYahooが開きます。"
            android:title="Yahooを開く">
            <intent
                android:action="android.intent.action.VIEW"
                android:data="http://www.yahoo.co.jp" />
        </Preference>
    </PreferenceCategory>
</PreferenceScreen>

8~10行、16~18行のようにintentを指定する。XMLで書くだけでいいので楽ちん。

ただ単に「タップしたらURLを開く」という単純なことをしたいだけの場合はこっちでいいかも。

コードから設定する方法

コードからも設定できる。

public class SettingsFragment extends PreferenceFragmentCompat {
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.root_preferences, rootKey);
        //リスナーを設定
        getPreferenceManager().findPreference("google").setOnPreferenceClickListener(listener);
        getPreferenceManager().findPreference("yahoo").setOnPreferenceClickListener(listener);
    }
    //リスナー
    Preference.OnPreferenceClickListener aboutapp=new Preference.OnPreferenceClickListener() {
        @Override
        public boolean onPreferenceClick(Preference preference) {
            String url;
            switch (preference.getKey()){
                case "google":
                    url = "https://www.google.co.jp/";
                    break;
                case "yahoo":
                    url = "https://www.yahoo.co.jp";
                    break;
                default:
                    url = "https://www.hoge.com";
            }

            Uri uri = Uri.parse(url);
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            if (intent.resolveActivity(getActivity().getPackageManager()) != null) {
                startActivity(intent);
            }
            return false;
        }
    };
}

findPreferenceしてPreferenceを取得。

そしてそれらに対してリスナーを設定する方法。

「こういう条件のときはこのURLを開くようにする」とか「設定によってタップ自体を無効にする」みたいなややこしいことをしたい場合はこっちの方法で。

コメント

タイトルとURLをコピーしました