如何在PreferenceScreen中创建工具栏?

时间:2019-03-23 05:43:49

标签: android preferenceactivity preferencefragment

我正在尝试在当前应用中进行从 AppCompatPreferenceActivity 扩展的“设置”活动。我能够实现所需的屏幕,但无法创建带有返回键的简单工具栏。我已经尝试使用:

  1. 膨胀自定义工具栏
  2. 使用getSupportActionBar().setDisplayHomeAsUpEnabled(true)
  3. 中的 AppCompatPreferenceActivity

我使用的大部分内容来自this! 由于它引起的错误,我删除了它的片段部分。

此外,我有 NoActionBar 主题。

到目前为止,我已经在我的“关于”和“帮助”首选项中使用了它,这些首选项完美无缺:

    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    if (getSupportActionBar() != null) {
        getSupportActionBar().setTitle(getString(R.string.about));
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }

更新: 得到了答案here

2 个答案:

答案 0 :(得分:0)

是的,当您在工具栏上使用getSupportActionBar().setDisplayHomeAsUpEnabled(true);时,它应该可以正常工作,您的实现似乎是正确的,但是除非您进行调试或提供整个代码,否则并非所有人都可以找到这种情况,请尝试检查这种样式。

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">

        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

        <!--<item name="android:windowContentOverlay">@null</item>-->
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="drawerArrowStyle">@style/MaterialDrawer.DrawerArrowStyle</item>
    </style>
    <!--use item name="drawerArrowStyle" if you are using dark primaryColor in your app, else remove it-->
    <style name="MaterialDrawer.DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
        <item name="spinBars">false</item>
        <item name="color">@android:color/white</item>
    </style>

</resources>

toolbar = (Toolbar) findViewById(R.id.toolbar2);
        setSupportActionBar(toolbar);
        setTitle(getIntent().getExtras().getString("channe_name"));
        toolbar.setSubtitle(getIntent().getExtras().getString("channe_name"));
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

,并确保您在xml中也声明了相同的内容

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/toolbar2"
    android:layout_width="match_parent"
    android:layout_height="?android:actionBarSize"
    android:background="?colorPrimary"
    android:elevation="8dp"
    android:minHeight="?attr/actionBarSize"
    tools:ignore="Overdraw"
    tools:targetApi="lollipop">

答案 1 :(得分:0)

如何将AndroidX工具栏添加到PreferenceScreen

settings.xml

任何

PrefsFragment.java

public class PrefsFragment extends PreferenceFragmentCompat {
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.settings, rootKey);
    }
}

activity_settings.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <androidx.appcompat.widget.Toolbar
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/settings_toolbar"
            app:title="@string/header_settings"/>
    <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/settings_content"
    />
</LinearLayout>

SettingsActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);
    Toolbar toolbar = findViewById(R.id.settings_toolbar);
    setSupportActionBar(toolbar);
    getSupportFragmentManager()
            .beginTransaction()
            .replace(R.id.settings_content, new PrefsFragment())
            .commit();
}