quinta-feira, 3 de novembro de 2011

Preferences - Android Development

Preferences - Android Development

O que é:
Preferences é a tela de configuração (settings) do seu app, nessa activitiy que você terá todas as opções do seu aplicativo.
Dentro de uma PreferenceActivity você poderá ter 7 opções de componentes para usar:
-CheckBoxPreference: Como se fosse um checkbox normal, retorna true ou false.
-ListPreference: Mostra uma lista para o usuário selecionar 1 item. A propriedade android:entries tem que apontar para um array localizado no res/values/arrays.xml, e o android:entryValues é o array com os itens retornados.


-EditTextPreference: Mostra um dialog com um edittext.


-RingtonePreference: Como se fosse um ListPreference mas com os valores dos ringtones.


-Preference: Como se fosse um botão.


-PreferenceScreen: Abre uma nova tela de preferences.


-PreferenceCategory: Serve para separar as preferências em categorias.


Como criar uma PreferenceActivitiy:
Primeiro de tudo precisamos criar na pasta res/xml um arquivo chamado preference.xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
        <PreferenceCategory
                android:title="1 Categoria">
                <CheckBoxPreference
                        android:title="Checkbox Preference"
                        android:defaultValue="false"
                        android:key="checkboxPref" />
                <ListPreference
                        android:title="List Preference"
                        android:key="listPref"
                        android:defaultValue="digiGreen"
                        android:entries="@array/listArray"
                        android:entryValues="@array/listValues" />
        </PreferenceCategory>
        <PreferenceCategory
                android:title="Second Category">
        <EditTextPreference
                android:name="EditText Preference"
                android:defaultValue="Nothing"
                android:title="Edit This Text"
                android:key="editTextPref" />
        <RingtonePreference
                android:name="Ringtone Preference"
                android:title="Ringtones"
                android:key="ringtonePref" />
        <PreferenceScreen
                android:key="SecondPrefScreen"
                android:title="Second PreferenceScreen"
                <EditTextPreference
                        android:name="An other EditText Preference"
                        android:title="Edit text"
                        android:key="SecondEditTextPref" />
        </PreferenceScreen>
        <Preference
                android:title="Custom Preference"
                android:key="customPref" />
        </PreferenceCategory>
</PreferenceScreen>

Agora precisamos criar nossa classe que extenderá da PreferenceActivity:

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.Preference.OnPreferenceClickListener;
import android.widget.Toast;
 
public class Preferences extends PreferenceActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                addPreferencesFromResource(R.xml.preferences);
                // Get the custom preference
                Preference customPref = (Preference) findPreference("customPref");
                customPref
                                .setOnPreferenceClickListener(new OnPreferenceClickListener() {
 
                                        public boolean onPreferenceClick(Preference preference) {
                                                Toast.makeText(getBaseContext(),
                                                                "The custom preference has been clicked",
                                                                Toast.LENGTH_LONG).show();
                                                SharedPreferences customSharedPreference = getSharedPreferences(
                                                                "myCustomSharedPrefs", Activity.MODE_PRIVATE);
                                                SharedPreferences.Editor editor = customSharedPreference
                                                                .edit();
                                                editor.putString("myCustomPref",
                                                                "The preference has been clicked");
                                                editor.commit();
                                                return true;
                                        }
 
                                });
        }
}

Para pegarmos os valores definidos na Preference, devemos criar um método getPrefs() que pode ser chamado no onStart(). Ele deve ser assim:

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", "");
        }
Pronto, após isso, só precisamos declarar a activity no nosso manifest:

<activity
        android:name=".Preferences"
        android:label="@string/set_preferences">
</activity>
E pronto, nossa tela de configurações já está funcionando, e ela deve se parecer com isso:


2 comentários: