我遇到了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">
出了什么问题?
答案 0 :(得分:5)
要使用新的appcompat v21,您必须:
AppCompatActivity
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
的答案