Ver mensagens sem resposta | Ver tópicos ativos Hoje é 21 Nov 2017, 09:11



Responder Tópico  [ 3 Mensagens ] 
 Tela de Preferências [ PARTE 1 ] 
Autor Mensagem
Google employee
Google employee

Data de registro: 01 Jul 2013, 13:45
Mensagens: 2688
Localização: Rio de Janeiro
Mensagem Tela de Preferências [ PARTE 1 ]
Telas de configurações são bastante usadas usadas em aplicativos que precisam persistir alguma informação da escolha do usuário. SharedPreferences permite que isso seja feito de forma bem simples, armazenando dados primitivos ou Strings na forma de chave-valor.
Ao todo, existem 7 itens que podem ser usados:

PreferenceScreen: Usado para "guardar" os componentes da sua tela. Ou se preferir, entenda como um LinearLayout e outros containers.

PreferenceCategory: Separa os itens por categorias.

CheckBoxPreference: Um CheckBox para marcar alguma opção. Retorna um booleano.

EditTextPreference: Mostra um Dialog com um EditText.

ListPreference: Uma lista com opções para escolha do usuário.

Preference: Uma opção mais genérica, sem uma função específica. Pode ser usado como um botão. Muitos aplicativos o usam para mostrar a sua versão atual, embora não seja sua única utilidade.

RingtonePreference: Parecido com um ListPreference, mas mostra os toques do aparelho. Retorna uma String com o caminho do toque selecionado.

Para recuperar seus valores é algo bem simples, basta apenas informar a chave e seu valor padrão, usando os métodos getTipo, como getBoolean(), getString(), getInt(), etc:


    boolean b = preferencias.getBoolean("chave", true); // true = valor padrão
   
    String s = preferencias.getString("chave", "valor padrão");
 


Para começar com os exemplos, irei mostrar a tela com os textos que serão definidos de acordo com os valores das preferências:

inicio.xml


<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/Fill" >

   
    <LinearLayout
        style="@style/Fill"
        android:orientation="vertical" >

       
        <TextView
            android:id="@+id/volume"
            style="@style/FillWrap"
            android:textStyle="bold"
            android:textSize="20dp" />

           
        <TextView
            android:id="@+id/campeao"
            style="@style/FillWrap"
            android:textStyle="bold"
            android:textSize="20dp" />

           
        <TextView
            android:id="@+id/nome"
            style="@style/FillWrap"
            android:textStyle="bold"
            android:textSize="20dp" />

           
        <TextView
            android:id="@+id/ringtone"
            style="@style/FillWrap"
            android:textStyle="bold"
            android:textSize="20dp" />

           
    </LinearLayout>
   
</ScrollView>
 


Para economizar várias linhas de código, usei estilos. Créditos ao raphaelframos.

values/styles.xml


<?xml version="1.0" encoding="utf-8"?>
<resources>
   
    <style name="FillWrap">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
    </style>
   
    <style name="WrapFill">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">fill_parent</item>
    </style>
   
    <style name="Fill">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">fill_parent</item>
    </style>
   
    <style name="Wrap">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
    </style>
   
</resources>
 


E agora, o arquivo que contém a tela de configuração.

res/xml/preferencias.xml


<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android" >


    <PreferenceCategory
        android:title="Categoria 1" >


        <CheckBoxPreference
            android:key="chave_checkbox"
            android:title="Volume"
            android:summary="Quer deixar o aparelho no modo silencioso?"
            android:defaultValue="true" />

           
        <ListPreference
            android:key="chave_lista"
            android:title="Campeão da Copa"
            android:summary="Qual país vai ganhar a Copa do Mundo?"
            android:entries="@array/paises"
            android:entryValues="@array/paises"
            android:defaultValue="Brasil" />

           
        <EditTextPreference
            android:key="chave_campo"
            android:title="Nome"
            android:summary="Qual é o seu nome?"
            android:defaultValue="Sem Nome"
            android:dialogTitle="Digite aqui o seu nome" />

   
    </PreferenceCategory>
   
    <PreferenceCategory
        android:title="Categoria 2" >


        <RingtonePreference
            android:key="chave_ringtone"
            android:title="Ringtone"
            android:defaultValue="Toque predefinido"
            android:summary="Escolha um ringtone" />

           
        <Preference
            android:key="chave_preferencia"
            android:title="Portal Android"
            android:summary="Ir para o Portal Android" >

           
            <intent
                android:action="android.intent.action.VIEW"
                android:data="http://www.portalandroid.org" />

       
        </Preference>

    </PreferenceCategory>

</PreferenceScreen>
 


Como eu disse que um Preference pode ser usado como um botão, usei ele para abrir o link aqui do fórum.

android:key: é a chave de identificação para o componente. Igual ao android:id.

android:title: é o título do item que aparece nas configurações.

android:summary: é um pequeno texto que fica em baixo do título. Geralmente é onde se informa a funcionalidade da determinada opção.

android:defaultValue: é o seu valor padrão, usado na hora de recuperar a preferência com os métodos getTipo.

android:dialogTitle: é o título que aparece nas opções que são mostradas em um Dialog, como o EditTextPreference.

android:entries: são os nomes que aparecem na ListPreference. Faz referência ao arquivo values/array.xml.

android:entryValues: são os valores de cada nome na ListPreference.

array.xml


<?xml version="1.0" encoding="utf-8"?>
<resources>
   
    <string-array name="paises">
        <item>Brasil</item>
        <item>Argentina</item>
        <item>Portugal</item>
    </string-array>
   
</resources>
 


menu.xml


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/menu_preferencias"
        android:title="Configuraçôes" />

</menu>
 


Continuação do artigo viewtopic.php?f=7&t=26751

_________________
Quando seu problema for resolvido, clique na opção Editar no lado superior direito da sua primeira mensagem e coloque [Resolvido] no título.
Se resolveu o problema sozinh@, não esqueça de postar a solução, ela ajuda usuários em buscas no fórum.
Use os marcadores java e xml quando for postar.

Aprenda Java com esta apostila.


14 Fev 2014, 16:05
Perfil WWW
I am API
I am API

Data de registro: 04 Jan 2012, 12:44
Mensagens: 808
Mensagem Re: Tela de Preferências [ PARTE 1 ]
Kaito!

Muito bom tutorial! Parabéns!

_________________

E-Mail: thales.bm@hotmail.com
LinkedIn: LinkedIn
Aplicativos no Google Play: Biblioteca de Aplicativos
Livro de Estudos: Google Android - 3ª Edição


17 Fev 2014, 10:51
Perfil
Google employee
Google employee

Data de registro: 01 Jul 2013, 13:45
Mensagens: 2688
Localização: Rio de Janeiro
Mensagem Re: Tela de Preferências [ PARTE 1 ]
Valeu, Shenn!!!

_________________
Quando seu problema for resolvido, clique na opção Editar no lado superior direito da sua primeira mensagem e coloque [Resolvido] no título.
Se resolveu o problema sozinh@, não esqueça de postar a solução, ela ajuda usuários em buscas no fórum.
Use os marcadores java e xml quando for postar.

Aprenda Java com esta apostila.


17 Fev 2014, 21:18
Perfil WWW
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 3 Mensagens ] 

Quem está online

Usuários vendo este fórum: adilson.afl, agtavares, alexandre, alexandrepom, alfredo_ej, alylson, amos, andi, Andre Brito, Andreid, andreluzz, antoniodourado, arnaldo.miranda, Bitor, btminzon, canaville, car.demarco, Carla Luz, cassianotartari, Celso Jr., claudioalfonso, Comandante Cody, danielbfranco, dbispo, dchechetto, Diego, difrene, Dorpho, DroidBot, eduzortea, Erik Patekoski, erosvaldo, euguns, EvertonLB, fabiano_eletro, fabric01, fabrizior, faco, fcoroa, felipedsilva, ferrodecaju, Filipe larizzatti, Flavio, fraga, francismarconcini, frederico.affini, furlanrapha, Gabriel Teófilo, garretereis, glmsistemas, guilhermesmo, gutodias, HAMSES, hbarroco, helder, henrique.garcia, Idelto, Ielo8, ismaels, jacksonst, Jalerson, jasn, jhou, Jorge Machin, juliana_costa, juliano, Juliobcosta, jwv, Ki-Adi-Mundi, Kureiton, lanlan, leo, LucasNascimento, maolveira, marcelochiquinho, marcow, marinho5, martins, Mayara Trevisol, Meticore, mlemos, MpassosT, mrkensley, o-raposa, oliverlessa, Petto, phsantos, pumadeejay, pyrobit, Rafael, rafsantos, Ranieri, raninhofernandes, reginaldo, renata, renatocoliveira, renegheller, ricardzanella, rixargolo, roberto caceres, Robson Florentino, robsonoracle, rodrigoinnova, rogerio, sandro, ScoobyGB, shadow, talves, thiaguim, tnarnold, ton.soares, williamcmello, wilsond, zeantonio e 1 visitante


Você não pode criar novos tópicos neste fórum
Você não pode responder tópicos neste fórum
Você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode enviar anexos neste fórum

Procurar por:

© 2007 - 2016 Portal Android - Comunidade de Desenvolvedores Android

Estamos no Linkedin    Siga-nos no twitter


Powered by phpBB - Hospedado por Bemobi