Organizar as configurações Parte do Android Jetpack.
Telas de configurações grandes e complexas podem dificultar que o usuário encontre uma configuração específica que ele queira mudar. A biblioteca Preference oferece as seguintes maneiras de organizar melhor as telas de configurações.
Categorias de preferência
Se você tiver vários objetos
Preference
relacionados em uma única
tela, poderá agrupá-los usando um
PreferenceCategory
. Um
PreferenceCategory
mostra o título de uma categoria e a separa visualmente.
Para definir um PreferenceCategory
em XML, una as tags Preference
com um
PreferenceCategory
, da seguinte maneira:
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"> <PreferenceCategory app:key="notifications_category" app:title="Notifications"> <SwitchPreferenceCompat app:key="notifications" app:title="Enable message notifications"/> </PreferenceCategory> <PreferenceCategory app:key="help_category" app:title="Help"> <Preference app:key="feedback" app:summary="Report technical issues or suggest new features" app:title="Send feedback"/> </PreferenceCategory> </PreferenceScreen>
O resultado será semelhante a este:
Divida sua hierarquia em várias telas
Se você tiver um grande número de objetos Preference
ou categorias distintas, poderá mostrá-los em telas separadas. Cada tela é um
PreferenceFragmentCompat
com a própria hierarquia separada. Objetos Preference
na tela inicial podem se vincular a subtelas que contenham preferências
relacionadas.
A Figura 2 mostra uma hierarquia simples que contém duas categorias: Messages e Sync.
A Figura 3 mostra o mesmo conjunto de preferências dividido em várias telas:
Para vincular telas com um Preference
, declare um app:fragment
em XML ou
use
Preference.setFragment()
.
Inicia o nome completo do pacote do PreferenceFragmentCompat
quando
o Preference
é tocado, conforme mostrado no exemplo a seguir.
<Preference app:fragment="com.example.SyncFragment" .../>
Quando um usuário toca em um Preference
com um Fragment
associado, o método de
interface
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment()
é chamado. Esse método é onde você processa a exibição da nova tela e onde
a tela é implementada no Activity
circundante.
Uma implementação típica é semelhante a esta:
Kotlin
class MyActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPreferenceStartFragmentCallback { ... override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean { // Instantiate the new Fragment. val args = pref.extras val fragment = supportFragmentManager.fragmentFactory.instantiate( classLoader, pref.fragment) fragment.arguments = args fragment.setTargetFragment(caller, 0) // Replace the existing Fragment with the new Fragment. supportFragmentManager.beginTransaction() .replace(R.id.settings_container, fragment) .addToBackStack(null) .commit() return true } }
Java
public class MyActivity extends AppCompatActivity implements PreferenceFragmentCompat.OnPreferenceStartFragmentCallback { ... @Override public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref) { // Instantiate the new Fragment. final Bundle args = pref.getExtras(); final Fragment fragment = getSupportFragmentManager().getFragmentFactory().instantiate( getClassLoader(), pref.getFragment()); fragment.setArguments(args); fragment.setTargetFragment(caller, 0); // Replace the existing Fragment with the new Fragment. getSupportFragmentManager().beginTransaction() .replace(R.id.settings_container, fragment) .addToBackStack(null) .commit(); return true; } }
PreferenceScreens
Não é mais possível declarar hierarquias aninhadas no mesmo recurso XML usando um
<PreferenceScreen>
aninhado. Use objetos Fragment
aninhados.
Usar atividades separadas
Como alternativa, se precisar personalizar muito cada tela ou se quiser transições
completas de Activity
entre telas, use um Activity
separado para
cada PreferenceFragmentCompat
. Ao fazer isso, é possível personalizar totalmente cada
Activity
e a tela de configurações correspondente. Para a maioria dos apps, não
recomendamos isso. Em vez disso, use Fragments
conforme descrito anteriormente.
Para saber mais sobre como iniciar uma Activity
usando uma Preference
, consulte
Ações de preferência.