PreferenceActivity |
Top Previous Next |
Telas Tela de preferências Configuracoes.java
package com.minhaspreferencias;
import android.app.Activity; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; import android.widget.Toast;
// extende a Activity especial "PreferenceActivity" public class Configuracoes extends PreferenceActivity implements OnSharedPreferenceChangeListener {
// este componente eu declarei para "exibir" na tela de preferencia na parte // summary sempre o valor editado - só mostro 1 EditText // teria que fazer manualmente para cada um OU usar rotinas prontas // da internet para fazer todos automaticamente public static final String KEY_EDIT = "editTextPref"; EditTextPreference edTexto;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
// xml onde estão todas as preferências "visualmente" falando addPreferencesFromResource(R.xml.preferencias);
// encontra a referencia para termos acesso ao edText edTexto = (EditTextPreference)getPreferenceScreen().findPreference(KEY_EDIT);
// evento usando quando usuário clicar na preferencia "Customizada" Preference customPref = (Preference) findPreference("customPref"); customPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) { Toast.makeText(getBaseContext(), "Você clicou na customizada", Toast.LENGTH_LONG).show(); SharedPreferences customSharedPreference = getSharedPreferences("myCustomSharedPrefs", Activity.MODE_PRIVATE); SharedPreferences.Editor editor = customSharedPreference.edit(); editor.putString("myCustomPref", "a preferencia foi clicada"); editor.commit(); return true; } }); }
@Override protected void onResume() { super.onResume(); // no resumo carrega a preferencia do edText e coloca no summary dele edTexto.setSummary(PreferenceManager.getDefaultSharedPreferences(this).getString(KEY_EDIT, "valor default")); // associa um evento para quando o usuário alterar a preferência PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this); }
@Override protected void onPause() { super.onPause(); // "desregistra" o evento PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this); }
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { // quando usuario alterar esta chave trocamos o summary da edit if (key.equals(KEY_EDIT)) { edTexto.setSummary(sharedPreferences.getString(key, "")); } } }
TelaPreferenciasActivity.java
package com.minhaspreferencias;
import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast;
public class TelaPreferenciasActivity extends Activity {
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
// botão abrir preferences Button btnConfig = (Button) findViewById(R.id.btnConfig); btnConfig.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent settingsActivity = new Intent(getBaseContext(), Configuracoes.class); startActivity(settingsActivity); } });
// botão exibir preferences Button btnTeste = (Button) findViewById(R.id.btnTeste); btnTeste.setOnClickListener(new OnClickListener() { public void onClick(View v) { getPrefs(); // esta apenas uma das preferencias Toast.makeText(getBaseContext(), "O check está " + (CheckboxPreference ? "SIM" : "NÃO"), Toast.LENGTH_SHORT).show(); } }); }
boolean CheckboxPreference; String ListPreference; String editTextPreference; String ringtonePreference; String secondEditTextPreference; String customPref;
private void getPrefs() { // Get the xml/preferences.xml preferences SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); CheckboxPreference = prefs.getBoolean("checkboxPref", true); ListPreference = prefs.getString("listPref", "nr1"); editTextPreference = prefs.getString("editTextPref", "Nothing has been entered"); ringtonePreference = prefs.getString("ringtonePref", "DEFAULT_RINGTONE_URI"); secondEditTextPreference = prefs.getString("SecondEditTextPref", "Nothing has been entered"); // Get the custom preference SharedPreferences mySharedPreferences = getSharedPreferences("myCustomSharedPrefs", Activity.MODE_PRIVATE); customPref = mySharedPreferences.getString("myCusomPref", ""); } }
/res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" >
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Exemplo de preferências" />
<Button android:id="@+id/btnConfig" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Abrir parâmetros" />
<Button android:id="@+id/btnTeste" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Testar parâmetros" />
</LinearLayout>
/res/values/array.xml
<?xml version="1.0" encoding="utf-8"?> <resources>
<string-array name="listArray"> <item>Valor 1</item> <item>Valor 2</item> <item>Valor 3</item> </string-array>
<string-array name="listValues"> <item>1</item> <item>2</item> <item>3</item> </string-array>
</resources>
/res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources>
<string name="app_name">TelaPreferencias</string> <string name="set_preferences">Preferências</string>
</resources>
/res/xml/preferencias.xml
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="Primeira Categoria" >
<CheckBoxPreference android:defaultValue="false" android:key="checkboxPref" android:summary="Esta preferência pode ser verdadeira ou falsa" android:title="Sou um Checkbox" />
<ListPreference android:defaultValue="2" android:entries="@array/listArray" android:entryValues="@array/listValues" android:key="listPref" android:summary="Esta preferencia permite voce escolher um valor num array" android:title="Preferencia tipo Lista" />
</PreferenceCategory>
<PreferenceCategory android:title="Segunda Categoria" >
<EditTextPreference android:name="edTexto" android:defaultValue="Nothing" android:key="editTextPref" android:summary="Permite você entrar com uma string" android:title="Edite este texto" />
<RingtonePreference android:name="Ringtone Preference" android:key="ringtonePref" android:summary="Selecione um ringtone (tipo default do android)" android:title="Ringtones" />
<PreferenceScreen android:key="SecondPrefScreen" android:summary="Esta é uma segunda tela de preferencias" android:title="Segunda Tela" >
<EditTextPreference android:name="Outro EditText" android:key="SecondEditTextPref" android:summary="Esta é uma preferencia da segunda tela" android:title="Editar Texto" />
</PreferenceScreen>
<Preference android:key="customPref" android:summary="Isto funciona como um botão - existe um evento no java" android:title="Preferencia Customizada" /> </PreferenceCategory>
</PreferenceScreen>
Manifest
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.minhaspreferencias" android:versionCode="1" android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".TelaPreferenciasActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Configuracoes" android:label="@string/set_preferences" > </activity> </application>
</manifest> |