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.