将 ActionBar 添加到 PreferenceActivity
Add ActionBar to a PreferenceActivity
我正在尝试使用 PreferenceActivity
制作 Settings
Activity
。问题是无论我做什么,ActionBar
都不会出现。
我试过 getSupportActionBar
、getActionBar
、setActionBar
。什么都不管用。
我看到其他应用设置带有 ActionBar
s。他们不使用PreferenceActivity
吗?
如果您使用的是AppCompat主题,需要注意几点。
PreferenceActivity
不扩展AppCompatActivity
或弃用的ActionBarActivity
。
作为解决方案,您可以创建一个 PreferenceFragment
,然后 在标准 AppCompatActivity
中使用它。当然你也可以使用 Toolbar
.
此外,使用新的 22.1+ appcompat,您可以使用 AppCompatDelegate 将 AppCompat 的支持扩展到任何 Activity。
你可以查看这个官方 link 到 AppCompatPreferenceActivity,在那里你可以找到这个技术的例子。
通过使用派生自 DarkActionBar 的主题显式设置 Activity 主题,我们可以重新添加操作栏。
我做了同样的事情,在我的 设置 activity 中有一个操作栏,它对我有用。
1.First 在 styles.xml
中为您的 设置 Activity 添加不同的样式
<style name="SettingsTheme" parent="AppTheme"/>
2.Then 为版本 21 (v21/styles.xml) 制作一个单独的 styles.xml,如下所示
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Settings activity theme. -->
<style name="SettingsTheme" parent="@android:style/Theme.Material.Light.DarkActionBar">
<item name="android:colorPrimary">@color/sunshine_blue</item>
<item name="android:colorPrimaryDark">@color/sunshine_dark_blue</item>
</style>
</resources>
- 最后,在设置的 AndroidManifest 标签中 Activity 您还需要添加设置主题:
android:theme="@style/SettingsTheme"
这会在 android 版本大于或等于 21 的设备中为您的 设置 activity 添加一个操作栏。
这对我有用,
只需将 PreferenceActivity 更改为 AppCompatActivity 并在您的 manifest.xml 文件中为该特定 [= 添加 parentActivityName
32=].
AndroidManifest.xml
<activity
android:name=".SettingsActivity"
android:label="@string/title_activity_settings"
android:parentActivityName=".HomeActivity"></activity>
SettingsActivty.java
public class SettingsActivity extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
}
public static class MyPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
我正在尝试使用 PreferenceActivity
制作 Settings
Activity
。问题是无论我做什么,ActionBar
都不会出现。
我试过 getSupportActionBar
、getActionBar
、setActionBar
。什么都不管用。
我看到其他应用设置带有 ActionBar
s。他们不使用PreferenceActivity
吗?
如果您使用的是AppCompat主题,需要注意几点。
PreferenceActivity
不扩展AppCompatActivity
或弃用的ActionBarActivity
。
作为解决方案,您可以创建一个 PreferenceFragment
,然后 在标准 AppCompatActivity
中使用它。当然你也可以使用 Toolbar
.
此外,使用新的 22.1+ appcompat,您可以使用 AppCompatDelegate 将 AppCompat 的支持扩展到任何 Activity。
你可以查看这个官方 link 到 AppCompatPreferenceActivity,在那里你可以找到这个技术的例子。
通过使用派生自 DarkActionBar 的主题显式设置 Activity 主题,我们可以重新添加操作栏。
我做了同样的事情,在我的 设置 activity 中有一个操作栏,它对我有用。
1.First 在 styles.xml
中为您的 设置 Activity 添加不同的样式<style name="SettingsTheme" parent="AppTheme"/>
2.Then 为版本 21 (v21/styles.xml) 制作一个单独的 styles.xml,如下所示
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Settings activity theme. -->
<style name="SettingsTheme" parent="@android:style/Theme.Material.Light.DarkActionBar">
<item name="android:colorPrimary">@color/sunshine_blue</item>
<item name="android:colorPrimaryDark">@color/sunshine_dark_blue</item>
</style>
</resources>
- 最后,在设置的 AndroidManifest 标签中 Activity 您还需要添加设置主题:
android:theme="@style/SettingsTheme"
这会在 android 版本大于或等于 21 的设备中为您的 设置 activity 添加一个操作栏。
这对我有用,
只需将 PreferenceActivity 更改为 AppCompatActivity 并在您的 manifest.xml 文件中为该特定 [= 添加 parentActivityName
32=].
AndroidManifest.xml
<activity
android:name=".SettingsActivity"
android:label="@string/title_activity_settings"
android:parentActivityName=".HomeActivity"></activity>
SettingsActivty.java
public class SettingsActivity extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
}
public static class MyPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}