【问题标题】:Add ActionBar to a PreferenceActivity将 ActionBar 添加到 PreferenceActivity
【发布时间】:2015-06-12 00:34:29
【问题描述】:

我正在尝试使用PreferenceActivity 制作Settings Activity。问题是ActionBar 无论我做什么都不会出现。

我试过getSupportActionBargetActionBarsetActionBar。没有任何效果。 我用ActionBars 看到了其他应用程序设置。他们不使用PreferenceActivity吗?

【问题讨论】:

标签: java android android-activity android-actionbar android-preferences


【解决方案1】:

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

PreferenceActivity 不扩展AppCompatActivity 或已弃用的ActionBarActivity

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

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

您可以查看AppCompatPreferenceActivity 的官方链接,您可以在其中找到该技术的示例。

【讨论】:

    【解决方案2】:

    通过使用派生自 DarkActionBar 的主题显式设置 SettingActivity,我们能够重新添加操作栏。

    我做了同样的事情,在我的 设置活动 中有一个操作栏,它对我有用。

    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 标记中添加设置主题:

      android:theme="@style/SettingsTheme"

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

    【讨论】:

      【解决方案3】:

      这对我有用,

      只需将 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);
      
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-17
        • 1970-01-01
        • 2012-07-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-18
        相关资源
        最近更新 更多