Отображение настроек с помощью «Настройки» в трехточечном меню.
-
21-12-2019 - |
Вопрос
Я настраиваю некоторые базовые настройки для своего приложения для Android, и у меня возникли некоторые проблемы.Прежде всего, я не мог понять, как использовать меню из трех точек в правом верхнем углу панели действий, чтобы открыть «Настройки».Поэтому я временно создал кнопку, которая вызывает ChooseSettings:
public void chooseSettings(View view) {
getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferenceActivity()).commit();
}
Это код моего класса 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);
}
}
Какой вид работает.В результате мой экран выглядит так:.
Решение
Настройки в дополнительном меню
Чтобы использовать настройки в дополнительном меню, вам необходимо переопределить onOptionsItemSelected метод, если это еще не сделано, и обработайте правильный идентификатор.
@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);
}
Заменять R.id.action_settings
с идентификатором вашего пункта меню.
Отображение PreferenceFragment
Как показано на изображении, экран настроек перекрывает существующий макет.
Обратите внимание, что вы можете заменить только добавленный вами фрагмент. динамически.
Я предполагаю, что xml для вашего экрана с кнопками «Угадай страну» и «Угадай флаги» был раздут и не добавлялся динамически как фрагмент, поэтому при добавлении фрагмента предпочтений он будет просто отображаться с перекрытием.
Решение
Один из способов сделать это — создать и запустить новое действие, которое будет загружать фрагмент ваших настроек.
Например, если вы создаете класс с именем SettingsActivity
который загрузит настройки (не забудьте добавить в 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();
}
}
Тогда в твоем onOptionsItemSelected
, вы можете начать настройку.
@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);
}
В противном случае вам придется изменить основной макет, чтобы использовать что-то вроде макета кадра, чтобы вы могли правильно добавлять/удалять/заменять фрагменты.