Tuesday, March 8, 2016

110-Android Studio 1.5 Settings Activity Template


.
110-Android Studio 1.5 Settings Activity Template

Continue from Tutorial 109

1) Create New Project

1.1) Configure New Project

Application Name: MySettings1
Company Domain: notarazi.com
Package Name: com.notarazi.mysettings1 (auto-generated)
Project Location: C:\Project1\MySettings1\ (auto-generated)

1.2) Select Target Device

1.3) Add Activity

Select Settings Activity.

1.4) Customize The Activity

Accept defaults.

2) Observe the project codes

2.1) AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.notarazi.mysettings1">
   <application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:supportsRtl="true"
       android:theme="@style/AppTheme">
       <activity
           android:name=".SettingsActivity"
           android:label="@string/app_name">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>

2.2) SettingsActivity.java

package com.notarazi.mysettings1;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.support.v7.app.ActionBar;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.preference.RingtonePreference;
import android.text.TextUtils;
import android.view.MenuItem;
import java.util.List;
/**
* A {@link PreferenceActivity} that presents a set of application settings. On
* handset devices, settings are presented as a single list. On tablets,
* settings are split by category, with category headers shown to the left of
* the list of settings.
<p/>
* See <a href="http://developer.android.com/design/patterns/settings.html">
* Android Design: Settings</a> for design guidelines and the <a
* href="http://developer.android.com/guide/topics/ui/settings.html">Settings
* API Guide</a> for more information on developing a Settings UI.
*/
public class SettingsActivity extends AppCompatPreferenceActivity {
   /**
    * A preference value change listener that updates the preference's summary
    * to reflect its new value.
    */
   private static Preference.OnPreferenceChangeListenersBindPreferenceSummaryToValueListener new Preference.OnPreferenceChangeListener() {
       @Override
       public boolean onPreferenceChange(Preference preference, Object value) {
           String stringValue = value.toString();
           if (preference instanceof ListPreference) {
               // For list preferences, look up the correct display value in
               // the preference's 'entries' list.
               ListPreference listPreference = (ListPreference) preference;
               int index = listPreference.findIndexOfValue(stringValue);
               // Set the summary to reflect the new value.
               preference.setSummary(
                       index >= 0
                               ? listPreference.getEntries()[index]
                               : null);
           } else if (preference instanceof RingtonePreference) {
               // For ringtone preferences, look up the correct display value
               // using RingtoneManager.
               if (TextUtils.isEmpty(stringValue)) {
                   // Empty values correspond to 'silent' (no ringtone).
                   preference.setSummary(R.string.pref_ringtone_silent);
               } else {
                   Ringtone ringtone = RingtoneManager.getRingtone(
                           preference.getContext(), Uri.parse(stringValue));
                   if (ringtone == null) {
                       // Clear the summary if there was a lookup error.
                       preference.setSummary(null);
                   } else {
                       // Set the summary to reflect the new ringtone display
                       // name.
                       String name = ringtone.getTitle(preference.getContext());
                       preference.setSummary(name);
                   }
               }
           } else {
               // For all other preferences, set the summary to the value's
               // simple string representation.
               preference.setSummary(stringValue);
           }
           return true;
       }
   };
   /**
    * Helper method to determine if the device has an extra-large screen. For
    * example, 10" tablets are extra-large.
    */
   private static boolean isXLargeTablet(Context context) {
       return (context.getResources().getConfiguration().screenLayout
               & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE;
   }
   /**
    * Binds a preference's summary to its value. More specifically, when the
    * preference's value is changed, its summary (line of text below the
    * preference title) is updated to reflect the value. The summary is also
    * immediately updated upon calling this method. The exact display format is
    * dependent on the type of preference.
    *
    * @see #sBindPreferenceSummaryToValueListener
    */
   private static void bindPreferenceSummaryToValue(Preference preference) {
       // Set the listener to watch for value changes.
       preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener);
       // Trigger the listener immediately with the preference's
       // current value.
       sBindPreferenceSummaryToValueListener.onPreferenceChange(preference,
               PreferenceManager
                       .getDefaultSharedPreferences(preference.getContext())
                       .getString(preference.getKey(), ""));
   }
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setupActionBar();
   }
   /**
    * Set up the {@link android.app.ActionBar}, if the API is available.
    */
   private void setupActionBar() {
       ActionBar actionBar = getSupportActionBar();
       if (actionBar != null) {
           // Show the Up button in the action bar.
           actionBar.setDisplayHomeAsUpEnabled(true);
       }
   }
   /**
    * {@inheritDoc}
    */
   @Override
   public boolean onIsMultiPane() {
       return isXLargeTablet(this);
   }
   /**
    * {@inheritDoc}
    */
   @Override
   @TargetApi(Build.VERSION_CODES.HONEYCOMB)
   public void onBuildHeaders(List<Header> target) {
       loadHeadersFromResource(R.xml.pref_headers, target);
   }
   /**
    * This method stops fragment injection in malicious applications.
    * Make sure to deny any unknown fragments here.
    */
   protected boolean isValidFragment(String fragmentName) {
       return PreferenceFragment.class.getName().equals(fragmentName)
               || GeneralPreferenceFragment.class.getName().equals(fragmentName)
               || DataSyncPreferenceFragment.class.getName().equals(fragmentName)
               || NotificationPreferenceFragment.class.getName().equals(fragmentName);
   }
   /**
    * This fragment shows general preferences only. It is used when the
    * activity is showing a two-pane settings UI.
    */
   @TargetApi(Build.VERSION_CODES.HONEYCOMB)
   public static class GeneralPreferenceFragment extends PreferenceFragment {
       @Override
       public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           addPreferencesFromResource(R.xml.pref_general);
           setHasOptionsMenu(true);
           // Bind the summaries of EditText/List/Dialog/Ringtone preferences
           // to their values. When their values change, their summaries are
           // updated to reflect the new value, per the Android Design
           // guidelines.
           bindPreferenceSummaryToValue(findPreference("example_text"));
           bindPreferenceSummaryToValue(findPreference("example_list"));
       }
       @Override
       public boolean onOptionsItemSelected(MenuItem item) {
           int id = item.getItemId();
           if (id == android.R.id.home) {
               startActivity(new Intent(getActivity(), SettingsActivity.class));
               return true;
           }
           return super.onOptionsItemSelected(item);
       }
   }
   /**
    * This fragment shows notification preferences only. It is used when the
    * activity is showing a two-pane settings UI.
    */
   @TargetApi(Build.VERSION_CODES.HONEYCOMB)
   public static class NotificationPreferenceFragment extends PreferenceFragment {
       @Override
       public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           addPreferencesFromResource(R.xml.pref_notification);
           setHasOptionsMenu(true);
           // Bind the summaries of EditText/List/Dialog/Ringtone preferences
           // to their values. When their values change, their summaries are
           // updated to reflect the new value, per the Android Design
           // guidelines.
           bindPreferenceSummaryToValue(findPreference("notifications_new_message_ringtone"));
       }
       @Override
       public boolean onOptionsItemSelected(MenuItem item) {
           int id = item.getItemId();
           if (id == android.R.id.home) {
               startActivity(new Intent(getActivity(), SettingsActivity.class));
               return true;
           }
           return super.onOptionsItemSelected(item);
       }
   }
   /**
    * This fragment shows data and sync preferences only. It is used when the
    * activity is showing a two-pane settings UI.
    */
   @TargetApi(Build.VERSION_CODES.HONEYCOMB)
   public static class DataSyncPreferenceFragment extends PreferenceFragment {
       @Override
       public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           addPreferencesFromResource(R.xml.pref_data_sync);
           setHasOptionsMenu(true);
           // Bind the summaries of EditText/List/Dialog/Ringtone preferences
           // to their values. When their values change, their summaries are
           // updated to reflect the new value, per the Android Design
           // guidelines.
           bindPreferenceSummaryToValue(findPreference("sync_frequency"));
       }
       @Override
       public boolean onOptionsItemSelected(MenuItem item) {
           int id = item.getItemId();
           if (id == android.R.id.home) {
               startActivity(new Intent(getActivity(), SettingsActivity.class));
               return true;
           }
           return super.onOptionsItemSelected(item);
       }
   }
}
AppCompatPreferenceActivity.java
package com.notarazi.mysettings1;
import android.content.res.Configuration;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.support.annotation.LayoutRes;
import android.support.annotation.Nullable;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatDelegate;
import android.support.v7.widget.Toolbar;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls
* to be used with AppCompat.
*/
public abstract class AppCompatPreferenceActivity extends PreferenceActivity {
   private AppCompatDelegate mDelegate;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       getDelegate().installViewFactory();
       getDelegate().onCreate(savedInstanceState);
       super.onCreate(savedInstanceState);
   }
   @Override
   protected void onPostCreate(Bundle savedInstanceState) {
       super.onPostCreate(savedInstanceState);
       getDelegate().onPostCreate(savedInstanceState);
   }
   public ActionBar getSupportActionBar() {
       return getDelegate().getSupportActionBar();
   }
   public void setSupportActionBar(@Nullable Toolbar toolbar) {
       getDelegate().setSupportActionBar(toolbar);
   }
   @Override
   public MenuInflater getMenuInflater() {
       return getDelegate().getMenuInflater();
   }
   @Override
   public void setContentView(@LayoutRes int layoutResID) {
       getDelegate().setContentView(layoutResID);
   }
   @Override
   public void setContentView(View view) {
       getDelegate().setContentView(view);
   }
   @Override
   public void setContentView(View view, ViewGroup.LayoutParams params) {
       getDelegate().setContentView(view, params);
   }
   @Override
   public void addContentView(View view, ViewGroup.LayoutParams params) {
       getDelegate().addContentView(view, params);
   }
   @Override
   protected void onPostResume() {
       super.onPostResume();
       getDelegate().onPostResume();
   }
   @Override
   protected void onTitleChanged(CharSequence title, int color) {
       super.onTitleChanged(title, color);
       getDelegate().setTitle(title);
   }
   @Override
   public void onConfigurationChanged(Configuration newConfig) {
       super.onConfigurationChanged(newConfig);
       getDelegate().onConfigurationChanged(newConfig);
   }
   @Override
   protected void onStop() {
       super.onStop();
       getDelegate().onStop();
   }
   @Override
   protected void onDestroy() {
       super.onDestroy();
       getDelegate().onDestroy();
   }
   public void invalidateOptionsMenu() {
       getDelegate().invalidateOptionsMenu();
   }
   private AppCompatDelegate getDelegate() {
       if (mDelegate == null) {
           mDelegate = AppCompatDelegate.create(thisnull);
       }
       return mDelegate;
   }
}

DOWNLOAD


.

No comments:

Post a Comment