Exibir configurações usando “Configurações” no menu de três pontos
-
21-12-2019 - |
Pergunta
Estou definindo algumas configurações básicas para meu aplicativo Android e estou tendo alguns problemas.Em primeiro lugar, não consegui descobrir como usar o menu de três pontos no canto superior direito da barra de ação para abrir Configurações.Então criei temporariamente um botão que chama ChooseSettings:
public void chooseSettings(View view) {
getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferenceActivity()).commit();
}
Este é o código da minha classe PreferenceActivity:
public class PreferenceActivity extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
}
}
Que tipo de trabalho.Isso faz com que minha tela fique assim:.
Solução
Configurações no menu flutuante
Para usar as Configurações no menu flutuante, você precisa substituir o onOptionsItemSelected método, se ainda não for, e manipule o ID correto.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
// Code to show settings.
return true;
}
return super.onOptionsItemSelected(item);
}
Substituir R.id.action_settings
com o id do seu item de menu.
Exibindo o PreferenceFragment
Como você mostrou na sua imagem, sua tela de preferências está sobreposta ao layout existente.
Observe que você só pode substituir um fragmento adicionado dinamicamente.
Suponho que o xml da sua tela que contém os botões Guess Country e Guess Flags foi inflado e não foi adicionado dinamicamente como um fragmento, portanto, ao adicionar o fragmento de preferência, ele seria simplesmente exibido sobreposto.
Solução
Uma maneira de fazer isso é criando e iniciando uma nova atividade que carregará seu fragmento de preferências.
Por exemplo, se você criar uma classe chamada SettingsActivity
que irá carregar as preferências (não se esqueça de adicionar ao AndroidManifest):
public class SettingsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferenceActivity()).commit();
}
}
Então em seu onOptionsItemSelected
, você pode iniciar a atividade de configurações.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
return true;
}
return super.onOptionsItemSelected(item);
}
Caso contrário, você precisaria alterar seu layout principal para usar algo como um layout de quadro para poder adicionar/remover/substituir fragmentos corretamente.