PreferenceActivity

Top  Previous  Next

Telas

 
Tela principal

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 - 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>