Android Preferences Activity example
Android application often needs settings that allow users to modify preferences in app. Android provides a powerful framework to manage user preferences. It allows us to define the way we want preferrences and it automatically generates UI for that. All we need to do is to simply use it in our app.Let us see in this tutorial how to integrate Android’s Preference framework (
PreferenceActivity) in any android app.Create a Hello World Android project in Eclipse. Go to New > Project > Android Project. Give the project name as Android_Preferences_example and select Android Runtime 2.1 or sdk 7.
This will generate a basic skeleton of project. But once we add all required source code the project structure would looks like following:
Once you are done with above steps, you will have a basic hello world Android App.
The Preference framework comes with an activity class
android.preference.PreferenceActivitywhich needs to be overridden with our own class. Create a class
UserSettingsActivity under package net.viralpatel.android where all activities are stored for this app. Copy following code into it.File: UserSettingActivity.java
package net.viralpatel.android;import android.os.Bundle;import android.preference.PreferenceActivity;public class UserSettingActivity extends PreferenceActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.settings); }} |
Create a new XML file under /xml directory class settings.xml and copy following code into it.
File: xml/settings.xml
<?xml version="1.0" encoding="utf-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <PreferenceCategory android:title="@string/pref_user_profile" > <EditTextPreference android:title="@string/pref_user_name" android:summary="@string/pref_user_name_summary" android:key="prefUsername"/> </PreferenceCategory> <PreferenceCategory android:title="@string/pref_update_setting" > <CheckBoxPreference android:defaultValue="false" android:key="prefSendReport" android:summary="@string/pref_send_report_summary" android:title="@string/pref_send_report" > </CheckBoxPreference> <ListPreference android:key="prefSyncFrequency" android:entries="@array/syncFrequency" android:summary="@string/pref_sync_frequency_summary" android:entryValues="@array/syncFrequencyValues" android:title="@string/pref_sync_frequency" /> </PreferenceCategory></PreferenceScreen> |
EditTextPreferenceis used to define an editable text property. In this example username is editable property.CheckBoxPreferenceallows you to define a boolean value in preference screen. In this example we define a property to check weather to send crash report or not.ListPreferenceas its name suggest allows user to select any one item from a given list. In this example we let user to decide what should be the frequency for data sync.
File: arrays.xml
<?xml version="1.0" encoding="utf-8"?><resources> <string-array name="syncFrequency"> <item name="1">Once a day</item> <item name="7">Once a week</item> <item name="3">Once a year</item> <item name="0">Never (Update maually)</item> </string-array> <string-array name="syncFrequencyValues"> <item name="1">1</item> <item name="7">7</item> <item name="30">30</item> <item name="0">0</item> </string-array> </resources> |
strings.xml file.File: strings.xml
<resources> <string name="app_name">Android_Preferences_example</string> <string name="hello_world">Hello world!</string> <string name="menu_settings">Settings</string> <string name="title_activity_main">MainActivity</string> <string name="pref_send_report">Send crash reports</string> <string name="pref_send_report_summary">Helps to fix bugs</string> <string name="pref_sync_frequency">Sync frequency</string> <string name="pref_sync_frequency_summary">Set the sync frequency</string> <string name="pref_user_name">Set username</string> <string name="pref_user_name_summary">Set your username</string> <string name="pref_user_profile">User Profile</string> <string name="pref_update_setting">Update Settings</string> </resources> |
First we need to create a menu which will be shown when User clicks menu button. This menu will have only one menuitem, Settings. On click on this item, we will display the Settings preference screen.
Create a file
settings.xml under /res/menu folder and copy following content into it:File: menu/settings.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/menu_settings" ic_menu_preferences="" android:orderInCategory="100" android:showAsAction="never" android:title="@string/menu_settings" android:icon="@android:drawable/ic_menu_preferences"/></menu> |
MainActivity under net.viralpatel.android package and copy following code into it:File: MainActivity.java
package net.viralpatel.android;import android.app.Activity;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.preference.PreferenceManager;import android.view.Menu;import android.view.MenuItem;import android.widget.TextView;public class MainActivity extends Activity { private static final int RESULT_SETTINGS = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); showUserSettings(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.settings, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_settings: Intent i = new Intent(this, UserSettingActivity.class); startActivityForResult(i, RESULT_SETTINGS); break; } return true; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case RESULT_SETTINGS: showUserSettings(); break; } } private void showUserSettings() { SharedPreferences sharedPrefs = PreferenceManager .getDefaultSharedPreferences(this); StringBuilder builder = new StringBuilder(); builder.append("\n Username: " + sharedPrefs.getString("prefUsername", "NULL")); builder.append("\n Send report:" + sharedPrefs.getBoolean("prefSendReport", false)); builder.append("\n Sync Frequency: " + sharedPrefs.getString("prefSyncFrequency", "NULL")); TextView settingsTextView = (TextView) findViewById(R.id.textUserSettings); settingsTextView.setText(builder.toString()); }} |
showUserSettings method fetches the values stored in Preferences and display on screen.Note how we used Preference API for that:
SharedPreferences sharedPrefs = PreferenceManager .getDefaultSharedPreferences(this);sharedPrefs.getString("prefUsername", "NULL");sharedPrefs.getBoolean("prefSendReport", false); |
File: layout/activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/textUserSettings" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="@dimen/padding_medium" tools:context=".MainActivity" /></LinearLayout> |
No comments:
Post a Comment