Нет actionBar с библиотекой app-compat-v21 в предпочтении?

У меня проблемы с ActionBar и app-compat-v21. ActionBar показан везде, кроме PreferenceActivity Я попытался следовать рекомендациям и сделал это с помощью фрагментов:

public class PrefsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 addPreferencesFromResource(R.xml.preferences);
 }
}

а также

public class PrefsActivity extends PreferenceActivity {
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 getFragmentManager().beginTransaction()
 .replace(android.R.id.content, new PrefsFragment()).commit();
 }
}

Однако нет ActionBar. BTW, в Styles.xml устанавливается

2 ответа

Чтобы использовать новый appcompat v21, вам необходимо:

  • расширить AppCompatActivity
  • используйте тему, которая наследуется от Theme.AppCompat. (например, Light или NoActionBar)

PreferenceActivity не расширяет AppCompatActivity.

Это причина, почему в вашем коде нет панели действий.

В качестве решения вы можете создать PreferenceFragment, как вы это делаете, и использовать его в стандартной AppCompatActivity.

ОБНОВЛЕНО 12/06/2015

С помощью нового приложения 22. 1+ appcompat вы также можете использовать AppCompatDelegate для расширения поддержки AppCompat для любого Activity.

Вы можете проверить эту официальную ссылку на AppCompatPreferenceActivity, где вы можете найти пример этой техники.


С совместимостью приложения панель инструментов должна быть определена в макете. Вы можете создать макет для действия "Настройки" на панели инструментов, а затем добавить фрагмент предпочтений.

Например:

activity_settings.xml

<!--?xml version="1.0" encoding="utf-8"?-->
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">

 <include xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toolbar" layout="@layout/toolbar">

 </include></relativelayout>

SettingsActivity:

public class SettingsActivity extends ActionBarActivity{
 @Override
 protected void onCreate(final Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_settings);

 Toolbar actionbar = (Toolbar) findViewById(R.id.toolbar);
 actionbar.setTitle("Settings");
 actionbar.setNavigationOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
 SettingsActivity.this.finish();
 }
 });
 }

MyPreferenceFragment:

public static class MyPreferenceFragment extends PreferenceFragment {
 @Override
 public void onCreate(final Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 addPreferencesFromResource(R.xml.settings);;
 }
}

edit: Обновлен ответ на использование ActionBarActivity вместо устаревшей функции PreferenceActivity

licensed under cc by-sa 3.0 with attribution.