Organizar suas configurações Parte do Android Jetpack.
Telas de configurações grandes e complexas podem dificultar a localização de um configuração específica que eles querem alterar. A Biblioteca de Preferências oferece seguintes maneiras de organizar melhor suas telas de configurações.
Categorias de preferência
Se você tiver vários
Objetos Preference
em uma única
você pode agrupá-los usando um
PreferenceCategory
Um
PreferenceCategory
mostra o título de uma categoria e separa visualmente a
categoria.
Para definir um PreferenceCategory
em XML, una as tags Preference
com uma
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,
pode exibi-los em telas separadas. Cada tela é um
PreferenceFragmentCompat
com a própria hierarquia separada. Preference
objeto
na tela inicial podem se vincular a subtelas que contêm informações
preferências.
A figura 2 mostra uma hierarquia simples que contém duas categorias: Mensagens e Sincronizar.
A Figura 3 mostra o mesmo conjunto de preferências dividido em várias telas:
Para vincular telas com uma Preference
, você pode declarar uma app:fragment
em XML ou
é possível usar
Preference.setFragment()
.
Inicie 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. É nesse método que você manipula a exibição da nova tela e onde
a tela seja implementada na Activity
ao redor.
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
Declarar hierarquias aninhadas no mesmo recurso XML usando um objeto
<PreferenceScreen>
não é mais compatível. Usar objetos Fragment
aninhados
como alternativa.
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,
recomendou isto; em vez disso, use Fragments
, conforme descrito anteriormente.
Para mais informações sobre como iniciar um Activity
usando uma Preference
, consulte
Ações de preferência.