androidandroid-layout

Android PreferenceScreen sits on top of Toolbar


Below is the screenshot of how the preference screen looks like :

screenshot showing problem

I am also including the layout and java code :

layout/toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/primary_dark"
android:elevation="0dp"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
tools:ignore="UnusedAttribute" />

layout/activity_settings.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include layout="@layout/toolbar" />
</LinearLayout>

xml/fragment_settings.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="Notifications">
        <SwitchPreference
            android:defaultValue="false"
            android:key="currencyNotificationOnOff"
            android:title="@string/notification_enable" />

        <com.adwitiya.currencyplus.view.TimePickerDialog
            android:defaultValue="08:00"
            android:dependency="currencyNotificationOnOff"
            android:key="scheduleNotificationTime"
            android:showDefault="true"
            android:title="Notification Time" />
    </PreferenceCategory>
    <PreferenceCategory android:title="">
        <Preference
            android:key="about"
            android:title="@string/about" />
        <Preference
            android:key="disclaimer"
            android:title="@string/disclaimer" />
        <Preference
            android:key="help"
            android:title="@string/help" />
    </PreferenceCategory>
    <PreferenceCategory android:title="General">
        <Preference
            android:key="spreadWord"
            android:title="@string/prefs_spread_word" />
        <Preference
            android:key="rateUs"
            android:title="@string/rate_us" />
        <Preference
            android:key="feedback"
            android:title="@string/feedback" />
    </PreferenceCategory>
</PreferenceScreen>

SettingsActivity.java

public class SettingsActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_settings);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new SettingsFragment()).commit();
        TimePickerDialog timePicker = new TimePickerDialog(this);
        PreferenceManager.setDefaultValues(this, R.xml.fragment_settings, false);
    }
}

SettingsFragment.java

public class SettingsFragment extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.fragment_settings);

        handleSettingsOptions();
    }
    ....
}

I am unable to keep the toolbar at the top and the preference screen elements below it. When the options are scrolled, it moves on top of the toolbar.

I am using a single preference screen and the each preference opens a webview.

Thank you in advance for your replies.


Solution

  • Fixed the issue. The changes that I have made are as follows :

    1. Removed the toolbar from 'activity_settings.xml'
    2. Removed the toolbar related code from 'SettingsActivity.java'
    3. In 'AndroidManifest.xml', to the activity I added 'Theme.AppCompat.Light.DarkActionBar' theme (change according to your requirement).