将ActionBar添加到PreferenceActivity

8
我正在尝试使用PreferenceActivity创建一个Settings Activity,但问题是无论我怎么做都不会显示ActionBar。 我已经尝试了getSupportActionBargetActionBarsetActionBar,但都无效。 我看到其他应用程序的设置界面上有ActionBar,他们没有使用PreferenceActivity吗?

1
是的,大多数人不会在包含设置的Activity中使用PreferenceActivity。我使用普通的Activity并自己处理所有内容。 - Varundroid
看看这个 https://dev59.com/CGMm5IYBdhLWcg3wIsQ2 - thealeksandr
3个回答

20

如果您使用AppCompat主题,则需要注意以下几点。

PreferenceActivity不会继承AppCompatActivity或已弃用的ActionBarActivity

解决方法是,创建一个PreferenceFragment并像往常一样在标准的AppCompatActivity使用它。当然,您也可以使用Toolbar

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

您可以检查这个官方链接AppCompatPreferenceActivity,在那里您可以找到这种技术的示例。


6
通过使用从DarkActionBar派生的主题来为SettingActivity添加主题,我们能够重新添加Action Bar。
我也做了同样的事情,在我的设置活动中添加了一个操作栏,并且它对我起作用了。
1.首先在styles.xml中为您的设置活动添加不同的样式。
<style name="SettingsTheme" parent="AppTheme"/>

2. 然后为版本21创建一个单独的styles.xml文件(v21/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> 
  1. 最后,在您的SettingsActivity的AndroidManifest标签中,您还需要添加设置主题:

    android:theme="@style/SettingsTheme"

这将在安卓版本大于或等于21的设备上为您的设置活动添加操作栏。


1

这是对我有效的方法,只需将 PreferenceActivity 更改为 AppCompatActivity 并在您的 manifest.xml 文件中为该特定活动添加 parentActivityName

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

        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接