関連:[Android]twiccaプラグインを作ってみた ツイート表示アクション編 | DevAchieve
設定用に PreferenceActivity を追加する。
PreferenceActivity は Android 3.0 以上からは Prefarence Fragment に置き換えられるらしい。
そして Android 3.0 未満は Compatibility Package というのを使って対応するらしい。
Support Library | Android Developersにある。
でもtwiccaプラグインの一つの項目しか無い設定画面1ページにそこまでするのが
いや、はい。Xperia Arc(Android 2.3以上にアップデート出来ない宿命を背負った端末)から変えたら対応するよ…。
ということで Androidmanifest.xml に Intent を受け取れるように記述する。
設定アクション | Developers | twicca - Yet another Twitter client for Android.
<activity android:name=".QuoteTweetSettings" android:label="@string/app_name" > <intent-filter> <action android:name="jp.r246.twicca.ACTION_PLUGIN_SETTINGS" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>QuoteTweetSettings.java で設定画面用XMLを onCreate() で読み込んで onStart() で色々する。
@Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.pref); } @Override protected void onStart(){ super.onStart(); final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); CheckBoxPreference check = (CheckBoxPreference)getPreferenceScreen().findPreference(getString(R.string.key)); check.setChecked(sp.getBoolean(check.getKey(), false)); check.setOnPreferenceChangeListener(new OnPreferenceChangeListener(){ @Override public boolean onPreferenceChange(Preference preference, Object newValue){ if(preference.getClass() == CheckBoxPreference.class){ if(preference.getKey().equals(getString(R.string.key))){ sp.edit().putBoolean(preference.getKey(), (Boolean)newValue).commit(); return true; } } return false; } }); }sp を final にしておくと OnPreferenceChangeListener() 内で使えるから便利。
設定項目が多かったら無名インナークラスで書くのはやめたほうがよさそう。
クラスの比較はなんかできたのでやってみただけ。意味は無い。と思う。
複数の CheckBoxPreference の onPreferenceChange() を一回の記述で済ませられそう。
そのためにはキーを string.xml で string-array で保存すればいけるのかもしれない。
addPreferencesFromResource(R.xml.pref);で読み込んだやつ。
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <CheckBoxPreference android:key="@string/key" android:title="@string/title" android:summaryOn="@string/on" android:summaryOff="@string/off" android:defaultValue="false" /> </PreferenceScreen>ハードコーディングすると変更時に死ねるので全部 string.xml にぶち込む。
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">QuoteTweet プラグイン for twicca</string> <string name="key">reply</string> <string name="title">リプライを入れる</string> <string name="on">QT @screen_name https://twitter.com/</string> <string name="off">QT https://twitter.com/</string> </resources>