activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
tools:context=".MainActivity"
android:background="#e6f1e0"
>
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Go To Settings"
/>
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="75dp"
/>
</RelativeLayout>
res/xml/preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
>
<EditTextPreference
android:key="@string/sp_key_user_name"
android:title="Input your name"
/>
<CheckBoxPreference
android:key="@string/sp_key_show_bold_text"
android:title="Display bold text?"
android:defaultValue="false"
android:summary="Select whether the app display bold text."
/>
<CheckBoxPreference
android:key="@string/sp_key_show_red_text_color"
android:title="Display red color text?"
android:defaultValue="false"
/>
</PreferenceScreen>
res/values/strings.xml
<resources>
<string name="app_name">Android Example - Preference</string>
<string name="title_activity_settings">Settings</string>
<string name="title_activity_main">Android Example - Preference</string>
<!-- SharedPreferences Keys -->
<string name="sp_key_show_bold_text">showBoldText</string>
<string name="sp_key_user_name">userName</string>
<string name="sp_key_show_red_text_color">showRedTextColor</string>
</resources>
MainActivity.java
package com.cfsuman.me.androidcodesnippets;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.Typeface;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private Context mContext;
private Activity mActivity;
private RelativeLayout mRelativeLayout;
private Button mButton;
private TextView mTextView;
private SharedPreferences mSharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get the application context
mContext = getApplicationContext();
// Get the activity
mActivity = MainActivity.this;
// Get the instance of SharedPreferences object
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
// Get the widgets reference from XML layout
mRelativeLayout = (RelativeLayout) findViewById(R.id.rl);
mButton = (Button) findViewById(R.id.btn);
mTextView = (TextView) findViewById(R.id.tv);
// Set a click listener for the text view
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(mContext,SettingsActivity.class);
startActivity(intent);
}
});
// Get the user's settings from SharedPreferences
String userName = mSharedPreferences.getString(getString(R.string.sp_key_user_name),"Guest");
boolean showBoldText = mSharedPreferences.getBoolean(getString(R.string.sp_key_show_bold_text), false);
boolean showRedTextColor = mSharedPreferences.getBoolean(getString(R.string.sp_key_show_red_text_color),false);
// If user preferred to show bold txt then make it bold
if(showBoldText){
mTextView.setTypeface(null, Typeface.BOLD);
}else {
mTextView.setTypeface(null,Typeface.NORMAL);
}
// Update the text with SharedPreferences
mTextView.setText("Hello " + userName);
// Display red color text based on user settings
if(showRedTextColor){
mTextView.setTextColor(Color.RED);
}else {
mTextView.setTextColor(Color.BLACK);
}
}
}
SettingsFragment.java
package com.cfsuman.me.androidcodesnippets;
import android.os.Bundle;
import android.preference.PreferenceFragment;
/*
PreferenceFragment
Shows a hierarchy of Preference objects as lists. These preferences will automatically save
to SharedPreferences as the user interacts with them. To retrieve an instance of
SharedPreferences that the preference hierarchy in this fragment will use, call
getDefaultSharedPreferences(android.content.Context) with a context in the same
package as this fragment.
*/
public class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
/*
public void addPreferencesFromResource (int preferencesResId)
Inflates the given XML resource and adds the preference hierarchy to the
current preference hierarchy.
Parameters
preferencesResId : The XML resource ID to inflate.
*/
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
}
}
SettingsActivity.java
package com.cfsuman.me.androidcodesnippets;
import android.os.Bundle;
import android.preference.PreferenceActivity;
/*
PreferenceActivity
This is the base class for an activity to show a hierarchy of preferences to the user.
Prior to HONEYCOMB this class only allowed the display of a single set of preference
This activity shows one or more headers of preferences, each of which is associated with a
PreferenceFragment to display the preferences of that header. The actual layout and display
of these associations can however vary; currently there are two major approaches it may take:
On a small screen it may display only the headers as a single list when first launched.
Selecting one of the header items will re-launch the activity with it only showing
the PreferenceFragment of that header.
On a large screen in may display both the headers and current PreferenceFragment
together as panes. Selecting a header item switches to showing the correct
PreferenceFragment for that item.
*/
public class SettingsActivity extends PreferenceActivity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
// Display the fragment as the main content
getFragmentManager().beginTransaction()
.replace(android.R.id.content,new SettingsFragment()).commit();
}
}




