将ActionBar添加到PreferenceActivity

问题描述 投票:8回答:3

我想用Settings做一个Activity PreferenceActivity。问题是,无论我做什么,ActionBar都不会出现。

我试过getSupportActionBargetActionBarsetActionBar。什么都行不通。我看到ActionBars的其他应用程序设置。他们不使用PreferenceActivity吗?

java android android-activity android-actionbar android-preferences
3个回答
18
投票

如果您使用的是AppCompat主题,则必须注意一些要点。

PreferenceActivity不延伸AppCompatActivity或弃用的ActionBarActivity

作为解决方案,您可以创建一个PreferenceFragment,并在标准的AppCompatActivity中使用它。当然你也可以使用Toolbar

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

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


5
投票

通过使用从DarkActionBar派生的主题明确指出Setting Activity,我们可以添加回Action Bar。

我也在设置活动中设置了一个操作栏,它对我有用。

1.首先在styles.xml中为Settings Activity添加不同的样式

<style name="SettingsTheme" parent="AppTheme"/>

2.然后为版本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> 
  1. 最后在您的SettingsActivity的AndroidManifest标签中,您还需要添加设置主题: 机器人:主题= “@风格/ SettingsTheme”

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


1
投票

这对我有用,

只需将PreferenceActivity更改为AppCompatActivity,并在manifest.xml文件中为该特定活动添加parentActivityName

AndroidManifest.xml中

 <activity
            android:name=".SettingsActivity"
            android:label="@string/title_activity_settings"
            android:parentActivityName=".HomeActivity"></activity>

settings act IV TY.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);

        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.