package com.example.fragment; import android.app.Dialog; import android.content.SharedPreferences; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.Preference; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import android.preference.PreferenceScreen; import android.support.v4.content.ContextCompat; import android.support.v7.widget.Toolbar; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.ListView; import com.example.R; import com.example.utility.Preferences; public class ExampleFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); addPreferencesFromResource(R.xml.prefs); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // register listener PreferenceManager.getDefaultSharedPreferences(getActivity()).registerOnSharedPreferenceChangeListener(this); // bind data bindData(); } @Override public void onDestroy() { super.onDestroy(); // unregister listener PreferenceManager.getDefaultSharedPreferences(getActivity()).unregisterOnSharedPreferenceChangeListener(this); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { bindData(); } @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { super.onPreferenceTreeClick(preferenceScreen, preference); // if the user has clicked on a preference screen, setup the action bar if(preference instanceof PreferenceScreen) { setupActionBar((PreferenceScreen) preference); } return false; } private void setupActionBar(PreferenceScreen preferenceScreen) { final Dialog dialog = preferenceScreen.getDialog(); Toolbar toolbar; if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { LinearLayout root = (LinearLayout) dialog.findViewById(android.R.id.list).getParent(); toolbar = (Toolbar) LayoutInflater.from(getActivity()).inflate(R.layout.toolbar, root, false); root.addView(toolbar, 0); } else { ViewGroup root = (ViewGroup) dialog.findViewById(android.R.id.content); ListView content = (ListView) root.getChildAt(0); root.removeAllViews(); toolbar = (Toolbar) LayoutInflater.from(getActivity()).inflate(R.layout.toolbar, root, false); int height; TypedValue typedValue = new TypedValue(); if(getActivity().getTheme().resolveAttribute(R.attr.actionBarSize, typedValue, true)) { height = TypedValue.complexToDimensionPixelSize(typedValue.data, getResources().getDisplayMetrics()); } else { height = toolbar.getHeight(); } content.setPadding(0, height, 0, 0); root.addView(content); root.addView(toolbar); } TypedArray typedArray = getActivity().getTheme().obtainStyledAttributes(R.style.Theme_Example_Light, new int[]{R.attr.homeAsUpIndicator}); int attributeResourceId = typedArray.getResourceId(0, 0); Drawable drawable = ContextCompat.getDrawable(getActivity(), attributeResourceId); toolbar.setTitle(preferenceScreen.getTitle()); toolbar.setNavigationIcon(drawable); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); } private void bindData() { // references PreferenceScreen rootPreferenceScreen = getPreferenceScreen(); EditTextPreference displayNameEditTextPreference = (EditTextPreference) findPreference(getString(R.string.prefs_key_display_name)); // preferences Preferences preferences = new Preferences(); // summary displayNameEditTextPreference.setSummary(preferences.getDisplayName()); } }