在referenceactivity中没有带有app-compat-v21库的actionBar?

时间:2014-12-12 21:03:54

标签: android android-actionbar android-appcompat material-design

我遇到了ActionBar和app-compat-v21的问题。
PreferenceActivity之外,ActionBar随处可见 我试图遵循建议并使用碎片制作:

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中设置为<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

出了什么问题?

2 个答案:

答案 0 :(得分:5)

要使用新的appcompat v21,您必须:

  • 扩展AppCompatActivity
  • 使用继承自 Theme.AppCompat 的主题。(例如Light或NoActionBar)

PreferenceActivity 不会延伸 AppCompatActivity

这就是您的代码中没有操作栏的原因。

作为解决方案,您可以在标准 AppCompatActivity 中创建PreferenceFragment并使用

2015年6月12日更新

使用新的22.1+ appcompat,您还可以使用AppCompatDelegate将AppCompat的支持扩展到任何活动。

您可以查看AppCompatPreferenceActivity的官方链接,在这里您可以找到此技术的示例。

答案 1 :(得分:2)

使用app compat,需要在布局中定义工具栏。您可以使用工具栏为“设置活动”创建布局,然后添加首选项片段。

例如:

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" />

    <fragment
        android:id="@+id/settings_fragment"
        android:name="com.bla.bla.MyPreferenceFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/toolbar" />

</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);;
    }
}

编辑:更新了使用ActionBarActivity而不是弃用的PreferenceActivity

的答案