sábado, 23 de abril de 2016

Chess y Menu - (Parte IV) ¿Como agregar Settings?

Android ofrece una API para que trabajemos con los Settings de una forma cómoda.
Vamos a mostrar tan solo un ejemplo en este post, y dejar algunos links a otros lugares que amplían el tema.

El objetivo es identificar los componentes principales:

Comencemos

Agregando nuestros propios settings

En Android tenemos unos activities especiales para los settings, se llaman PreferenceActivity, y podríamos decir que son similares a los layouts, pero hay que crearlas como un XML dentro de res/xml

Veamos con un ejemplo:

a) Creamos res/xml/settings.xml

dentro del directorio xml, con PreferenceScreen: 

El contenido del archivo settings.xml es el siguiente:





   




    


        


    



Donde los valores de los string son definidos en el archivo strings.xml con el prefijo "pref_..."
 

    ChessLab03-b

    Open navigation drawer
    Close navigation drawer

    Settings
    About

    
    
    Idioma
    Seleccionar Idioma
    Idioma de la aplicación




Luego, tenemos la clase que extiende al PreferenceActivity:
   
public class UserSettingsActivity extends PreferenceActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.settings);

    }
}




Importante: Hay que agregar el activity al AndroidManifest.xml
   
        
        

Por último, capturamos el evento del click sobre R.id.action_settings para cargar el activity que contiene los settings
  
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {

            Intent intent = new Intent(this, UserSettingsActivity.class);
            startActivityForResult(intent, RESULT_SETTINGS);

            return true;
        }

        return super.onOptionsItemSelected(item);
    }





Observemos el resultado, cuando se seleccionan los Settings, en donde se puede agregar el idioma:

    


Leyendo el archivo de preferencias

¿Como podemos verificar que valor fue grabado? ¿Donde se persiste el valor?

Nuevamente, recurrimos al ADM Android Device Monitor, tal como lo habíamos hecho con las Shared Preferences:

Dentro de data/data/... etc: 

Archivo: com.probarnocuestanada.chess.chesslab03_preferences.xml

Para ver su contenido, lo exportamos:
El contenido del archivo descargado es el siguiente, que hace referencia a la selección del idioma inglés:



Observamos que está también el archivo ChessLab03.xml del post de shared preferences


Distintos estilos para los Settings

Vamos a avanzar un poco mas, para ver distintos estilos aplicados y como influyen en el Look&Feel de los settings. Esto se edita en el AndroidManifest.xml donde está declarado el Activity de los settings 




Estilo: @style/AlertDialog.AppCompat.Light

Observemos que con este estilo, no es modo dialog, sino un activity:


Además podemos agregar el botón de Volver con este estilo. (Con los Diálogos pequeños, se produce el crash de la aplicación si queremos agregar el botón de volver):



Con este ejemplo, cerramos el post de Settings en Android, aunque dejamos un par de links para ampliar el tema:


Links

Apple Developer sobre Settings:

Material Design sobre Settings:




0 comentarios:

Publicar un comentario