facebook twitter hatena line email

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

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(EditTextPreferenceの使い方)
(Categoryを使う方法)
 
(同じ利用者による、間の1版が非表示)
行16: 行16:
 
  </PreferenceScreen>
 
  </PreferenceScreen>
  
*src/info/nonip/andoird/SamplePreference.java
+
*src/info/nonip/android/SamplePreference.java
 
  public class SamplePreference extends PreferenceActivity {
 
  public class SamplePreference extends PreferenceActivity {
 
   @Override
 
   @Override
行146: 行146:
 
<PreferenceCategory android:title="hogecate" >
 
<PreferenceCategory android:title="hogecate" >
 
     <PreferenceScreen android:key="hoge"
 
     <PreferenceScreen android:key="hoge"
         android:title="Hoge"
+
         android:title="Hoge" />
        />
+
 
</PreferenceCategory>
 
</PreferenceCategory>
 
</pre>
 
</pre>

2020年1月8日 (水) 14:27時点における最新版

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

  • 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/android/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;
	}
});

EditTextPreferenceの使い方

レイアウト

<EditTextPreference
    android:key="id"
    android:title="Input id"
    android:summary="YOUR_SSP_APP_ID"
/>

コード

EditTextPreference idPref = (EditTextPreference)findPreference( "id" );
idPref.setSummary(idPref.getText());
idPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
    @Override
    public boolean onPreferenceClick(Preference preference) {
        EditTextPreference editPref = (EditTextPreference)preference;
        if (editPref.getText() != null) {
            editPref.getEditText().setSelection(editPref.getText().length());
        }
        return true;
    }
});
idPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
    @Override
    public boolean onPreferenceChange(Preference preference,
                                      Object newValue) {
        EditTextPreference editPref = (EditTextPreference)preference;
        //editPref.getEditText().setSelection(editPref.getText().length());
        editPref.setSummary(newValue.toString());
        return true;
    }
});

Categoryを使う方法

<PreferenceCategory android:title="hogecate" >
    <PreferenceScreen android:key="hoge"
        android:title="Hoge" />
</PreferenceCategory>