(例:メモガキの設定画面)
こういった設定画面は、.xmlファイルに記述するケースが多いが動的にプログラミングで作成することもできる。
例えば、デバッグ時、AndroidOSのバージョンに応じて表示する設定項目の場合に使える。
1から作成する場合
まずは設定項目を作成するために、PreferenceManagerを取得する。// For Activity PreferenceManager PreferenceActivity::getPreferenceManager() // For Fragment PreferenceManager PreferenceFragment::getPreferenceManager()PreferenceManagerで設定項目のルート項目を作成する。
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 件のコメント:
コメントを投稿