facebook twitter hatena line email

「Android/Preference設定方法」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(preferenceを非表示にする方法)
行93: 行93:
 
  // スクリーンの場合
 
  // スクリーンの場合
 
  preferenceScreen.removePreference((PreferenceScreen) getPreferenceScreen().findPreference("screen_test_key"));
 
  preferenceScreen.removePreference((PreferenceScreen) getPreferenceScreen().findPreference("screen_test_key"));
 +
 +
 +
==PreferenceScreenをonClickしたい場合==
 +
<pre>
 +
PreferenceScreen preference = (PreferenceScreen)getPreferenceScreen().findPreference("key1");
 +
preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
 +
public boolean onPreferenceClick(Preference preference) {
 +
                // ここに処理
 +
Intent intent = new Intent(getApplicationContext(), SampleActivity.class);
 +
startActivity(intent);
 +
return true;
 +
}
 +
});
 +
</pre>

2018年12月6日 (木) 12:06時点における版

リスト文字列取得サンプル

  • res/xml/pref.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:title="設定"
  >
  <ListPreference
    android:key="list_key"
    android:title="@string/list_title"
    android:summary="@string/list_summary"
    android:dialogTitle="@string/list_dialogtitle"
    android:entries="@array/list_entries"
    android:entryValues="@array/list_entryvalues" />
</PreferenceScreen>
  • src/info/nonip/andoird/SamplePreference.java
public class SamplePreference extends PreferenceActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.pref);
    // プリファレンス取得
    ListPreference listPreference = (ListPreference)getPreferenceScreen().findPreference("list_key");
    listPreference.getValue();
  }
}
  • res/value/arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="list_entries">
        <item>2</item>
        <item>3</item>
        <item>4</item>
    </string-array>
</resources>

PreferenceActivity以外で取得したい場合はこのようにして取得する

以下2つは完全に同じ意味どちらでもOK

// 共通プリファレンス取得
SharedPreferences mSp = getSharedPreferences(getPackageName(), Activity.MODE_PRIVATE);
// 文字列取得
String value = mSp.getString("list_key", "unknown");

// 共通プリファレンス取得
SharedPreferences mSp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
// 文字列取得
String value = mSp.getString("list_key", "unknown");

値設定

listPreference.setValue("hoge");

タイトル設定

listPreference.setValue("hogetitle");

サマリー設定

listPreference.setSummary("hogesummary");

日本語リストをサマリへ設定

  • entryvaluesを使ってentries側を取得したい場合など
// リスト1プリファレンス取得
ListPreference listPreference = (ListPreference)getPreferenceScreen().findPreference("list1);
// 全角設定値をサマリに入れる
listPreference.setSummary(listPreference.getEntry());
// 変更イベント
public boolean onPreferenceChange(Preference preference, Object newValue) {
    // listへキャスト
    ListPreference listPreference = (ListPreference)preference;
    // listid取得
    int listId = listPreference.findIndexOfValue((String) newValue);
    // 全list取得
    CharSequence[] entries = listPreference.getEntries();
    // サマリへ値格納
    preference.setSummary(entries[listId]);
    return true;
}

preferenceを非表示にする方法

  • preference.xml
<PreferenceCategory android:key="category_test_key" >
       <PreferenceScreen
           android:key="display_test_key" />
</PreferenceCategory>
  • SettingActivity.java
PreferenceScreen preferenceScreen = getPreferenceScreen();
// カテゴリの場合
preferenceScreen.removePreference((PreferenceCategory) getPreferenceScreen().findPreference("category_test_key"));
// スクリーンの場合
preferenceScreen.removePreference((PreferenceScreen) getPreferenceScreen().findPreference("screen_test_key"));


PreferenceScreenをonClickしたい場合

PreferenceScreen preference = (PreferenceScreen)getPreferenceScreen().findPreference("key1");
preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
	public boolean onPreferenceClick(Preference preference) {
                // ここに処理
		Intent intent = new Intent(getApplicationContext(), SampleActivity.class);
		startActivity(intent);
		return true;
	}
});