(例:メモガキの設定画面)
こういった設定画面は、.xmlファイルに記述するケースが多いが動的にプログラミングで作成することもできる。
例えば、デバッグ時、AndroidOSのバージョンに応じて表示する設定項目の場合に使える。
1から作成する場合
まずは設定項目を作成するために、PreferenceManagerを取得する。- // For Activity
- PreferenceManager PreferenceActivity::getPreferenceManager()
- // For Fragment
- PreferenceManager PreferenceFragment::getPreferenceManager()
- PreferenceScreen PreferenceManager::createPreferenceScreen(Context context);
- // Context context;
- PreferenceScreen root = getPreferenceManager().createPreferenceScreen(context);
- PreferenceCategory category = new PreferenceCategory(context);
- category.setTitle("Category");
- root.addPreference(category);
- PreferenceScreen item = getPreferenceManager().createPreferenceScreen(context);
- item.setTitle("Item");
- category.add(item);
- // For Activity
- // void PreferenceScreen::setPreferenceScreen(PreferenceScreen preferenceScreen)
- //
- // For Fragment
- // void PreferenceFragment::setPreferenceScreen(PreferenceScreen preferenceScreen)
- //
- setPreferenceScreen(root);
既存の設定画面に追加する場合
既存の設定項目のルート項目を取得する。- // For Activity
- PreferenceScreen PreferenceActivity::getPreferenceScreen()
- // For Fragment
- PreferenceScreen PreferenceFragment::getPreferenceScreen()
参考までに
メモガキではアプリの更新履歴を、ファイル(res/raw)から更新履歴を情報を読み込み、動的に設定画面をベースに表示している。- public class RpNoteVersionFragment extends PreferenceListFragment {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setPreferenceScreen(createReleaseNote());
- }
- public PreferenceScreen createReleaseNote() {
- final Context c = getActivity();
- PreferenceScreen root = getPreferenceManager().createPreferenceScreen(c);
- BufferedReader reader = null;
- InputStream stream = null;
- String buffer = null;
- PreferenceCategory category = null;
- try {
- stream = c.getResources().openRawResource(R.raw.release_note);
- reader = new BufferedReader(new InputStreamReader(stream));
- while ((buffer = reader.readLine()) != null) {
- if (category == null) {
- category = new PreferenceCategory(c);
- category.setTitle(buffer);
- root.addPreference(category);
- } else if (buffer.equals("")) {
- category = null;
- } else {
- Preference item = new Preference(c);
- item.setTitle(buffer);
- item.setLayoutResource(R.layout.pref_single_item);
- category.addPreference(item);
- }
- }
- } catch (IOException ioe) {
- } finally {
- if (reader != null) {
- try {
- reader.close();
- } catch (IOException ioe) {}
- }
- if (stream != null) {
- try {
- stream.close();
- } catch (IOException ioe2) {}
- }
- }
- return root;
- }
- }
- // R.raw.release_noteの中身
- Ver.0.3.0
- Append text to an existing note with share.
- Add icons of category.
- Ver.0.2.0
- Change an order of category display.
- Ver.0.1.1
- Display a widget, today's number of schedules.
- Ver.0.0.0
- First version
0 件のコメント:
コメントを投稿