(例:メモガキの設定画面)
こういった設定画面は、.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 件のコメント:
コメントを投稿