facebook twitter hatena line google mixi email

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

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(preferenceを非表示にする方法)
(PreferenceScreenをonClickしたい場合)
行105: 行105:
 
}
 
}
 
});
 
});
 +
</pre>
 +
 +
==EditTextPreferenceの使い方==
 +
レイアウト
 +
<pre>
 +
    <EditTextPreference
 +
        android:key="id"
 +
        android:title="Input id"
 +
        android:summary="YOUR_SSP_APP_ID"
 +
    />
 +
</pre>
 +
コード
 +
<pre>
 +
        EditTextPreference idPref = (EditTextPreference)findPreference( "id" );
 +
        idPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
 +
            @Override
 +
            public boolean onPreferenceClick(Preference preference) {
 +
                EditTextPreference editPref = (EditTextPreference)preference;
 +
                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;
 +
            }
 +
        });
 
</pre>
 
</pre>

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

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

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

EditTextPreferenceの使い方

レイアウト

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

コード

        EditTextPreference idPref = (EditTextPreference)findPreference( "id" );
        idPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference preference) {
                EditTextPreference editPref = (EditTextPreference)preference;
                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;
            }
        });