How to Implement Preferences Settings Screen in Android?
Last Updated :
24 Dec, 2022
In many apps, we have seen the Settings screen which is most common in most of the apps. This settings screen is used to manage the preferences of the users. For creating this settings screen android provides a feature to make a settings preferences screen. In this article, we will take a look at implementing the preferences setting screen in Android.
What we are going to build in this article?
We will be building a simple application in which we will be displaying a simple button and on clicking on that button we will be opening a settings screen which we will create using settings preferences. This settings screen will look similar to what we can get to see in YouTube settings in the General option. A sample video is given below to get an idea about what we are going to do in this article. Note that we are going to implement this project using the Java language.
Step by Step Implementation
Step 1: Create a New Project
To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. Note that select Java as the programming language.
Step 2: Working with the activity_main.xml file
Navigate to the app > res > layout > activity_main.xml and add the below code to that file. Below is the code for the activity_main.xml file.
XML
<? xml version = "1.0" encoding = "utf-8" ?>
< RelativeLayout
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".MainActivity" >
< Button
android:id = "@+id/idBtnSettings"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_centerInParent = "true"
android:text = "Settings"
android:textAllCaps = "false" />
</ RelativeLayout >
|
Step 3: Creating a new activity for displaying the settings screen
Navigate to the app > java > your app’s package name > Right-click on it > New > Activity and select Empty activity and name it as SettingsActivity.
Step 4: Working with the MainActivity.java file
Go to the MainActivity.java file and refer to the following code. Below is the code for the MainActivity.java file. Comments are added inside the code to understand the code in more detail.
Java
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private Button settingsBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
settingsBtn = findViewById(R.id.idBtnSettings);
settingsBtn.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity. this , SettingsActivity. class );
startActivity(i);
}
});
}
}
|
Step 5: Creating a preference file for displaying our settings
Navigate to the app > res > Right-click on it > New > Android Resource file and you will get to see the below screen.
Step 6: Add the below code in the strings.xml file
Navigate to the app > res > values > strings.xml file and add the below code to it.
XML
< resources >
< string name = "app_name" >GFG App</ string >
< string name = "remind_to_take_a_break" >Remind me to take a break</ string >
< string name = "key_upload_quality" >key_upload_quality</ string >
< string name = "remind_me" >Remind me to take a break</ string >
< string name = "remind_me_for_bed_time" >remind_me_for_bed_time</ string >
< string name = "remind_for_bed_time" >Remind me for bed time</ string >
< string name = "limit_data_usage" >prefs_limit_data_usage</ string >
< string name = "stream_video" >Only stream HD video on Wi-Fi</ string >
< string name = "limit_mobile_usage" >Limit mobile data usage</ string >
< string name = "double_tap_to_seek" >Double-tap to seek</ string >
< string name = "pref_seek_val" >pref_seek_val</ string >
< string name = "seconds" >seconds</ string >
< string name = "uploads" >Uploads</ string >
< string name = "pref_uploads" >pref_uploads</ string >
< string name = "specify_network_prefs" >Specify network preferences for uploads</ string >
< string name = "prefs_restricted_mode" >prefs_restricted_mode</ string >
< string name = "restricted_mode" >Restricted Mode can help to hide videos with potentially mature content.No filter is 100% accurate, but it should help you to avoid most of this type of content.</ string >
< string name = "restricted_mode_description" >Restricted Mode</ string >
< string name = "prefs_enable_stats" >prefs_enable_stats</ string >
< string name = "enable_stats" >Enable stats for nerds</ string >
< string-array name = "pref_upload_quality_entries" >
< item >360p</ item >
< item >480p</ item >
< item >720p</ item >
< item >1080p</ item >
< item >Original</ item >
</ string-array >
< string-array name = "pref_remind_me_to_take_a_break" >
< item >1 hours</ item >
< item >2 hours</ item >
< item >3 hours</ item >
< item >5 hours</ item >
< item >10 hours</ item >
</ string-array >
< string-array name = "pref_seek_values" >
< item >5</ item >
< item >10</ item >
< item >15</ item >
< item >20</ item >
< item >30</ item >
</ string-array >
< string-array name = "pref_duration" >
< item >0</ item >
< item >1</ item >
< item >2</ item >
< item >3</ item >
< item >4</ item >
</ string-array >
< string-array name = "pref_uploads" >
< item >Only when on Wi-Fi</ item >
< item >On any network</ item >
</ string-array >
</ resources >
|
Step 7: Working with preferences.xml file
In preferences there are different types of preferences which are listed below :
- EditTextPreference: this is used to get the text from the user.
- ListPreference: this option is used to display a dialog with the list of options to choose from.
- CheckBoxPreference: this option is used to display a checkbox to toggle a setting.
- SwitchPreference: this option is used to turn the switch on and off.
- RingtonePreference: this option is used to open the ringtone page of your device.
- Preference with an Intent action android.intent.action.VIEW – to open an external browser navigating to an URL.
Navigate to the app > res > xml > preferences.xml file and add the below code to it. Comments are added in the code to get to know in more detail.
XML
<? xml version = "1.0" encoding = "utf-8" ?>
< PreferenceScreen
< PreferenceCategory android:title = "General" >
< ListPreference
android:defaultValue = "3"
android:dialogTitle = "@string/remind_to_take_a_break"
android:entries = "@array/pref_remind_me_to_take_a_break"
android:entryValues = "@array/pref_duration"
android:key = "@string/key_upload_quality"
android:summary = "@string/remind_me"
android:title = "@string/remind_me" />
< SwitchPreference
android:defaultValue = "false"
android:key = "@string/remind_me_for_bed_time"
android:title = "@string/remind_for_bed_time" />
< SwitchPreference
android:defaultValue = "false"
android:key = "@string/limit_data_usage"
android:summary = "@string/stream_video"
android:title = "@string/limit_mobile_usage" />
< ListPreference
android:defaultValue = "1"
android:dialogTitle = "@string/double_tap_to_seek"
android:entries = "@array/pref_seek_values"
android:entryValues = "@array/pref_duration"
android:key = "@string/pref_seek_val"
android:summary = "@string/seconds"
android:title = "@string/double_tap_to_seek" />
< ListPreference
android:defaultValue = "1"
android:dialogTitle = "@string/uploads"
android:entries = "@array/pref_uploads"
android:entryValues = "@array/pref_duration"
android:key = "@string/pref_uploads"
android:summary = "@string/specify_network_prefs"
android:title = "Uploads" />
< SwitchPreference
android:defaultValue = "false"
android:key = "@string/prefs_restricted_mode"
android:summary = "@string/restricted_mode"
android:title = "@string/restricated_mode_description" />
< SwitchPreference
android:defaultValue = "false"
android:key = "@string/prefs_enable_stats"
android:title = "@string/enable_stats" />
</ PreferenceCategory >
</ PreferenceScreen >
|
Step 8: Now create a new java class for displaying our preference fragment
Navigate to the app > java > your app’s package name > Right-click on it > New > Java class and name it as SettingsFragment and add the below code to it. Comments are added in the code to get to know in more detail.
Java
import android.os.Bundle;
import android.preference.PreferenceFragment;
import androidx.annotation.Nullable;
public class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate( @Nullable Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
|
Step 9: Working with activity_settings.xml file
Navigate to the activity_settings.xml file and add the below code to it. Comments are added in the code to get to know in more detail.
XML
<? xml version = "1.0" encoding = "utf-8" ?>
< androidx.constraintlayout.widget.ConstraintLayout
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".SettingsActivity" >
< FrameLayout
android:id = "@+id/idFrameLayout"
android:layout_width = "match_parent"
android:layout_height = "match_parent" />
</ androidx.constraintlayout.widget.ConstraintLayout >
|
Step 10: Working with SettingsActivity.java file
Navigate to the app > java > your app’s package name > SettingsActivity.java file and add the below code to it. Comments are added in the code to get to know in more detail.
Java
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class SettingsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
getSupportActionBar().setTitle( "Settings" );
if (findViewById(R.id.idFrameLayout) != null ) {
if (savedInstanceState != null ) {
return ;
}
getFragmentManager().beginTransaction().add(R.id.idFrameLayout, new SettingsFragment()).commit();
}
}
}
|
Now run your app and see the output of the app.
Output:
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...