The following code shows how to create preference dialog for email value.
res/xml/prefs.xml
<?xml version="1.0" encoding="utf-8"?> <!-- Copyright (c) 2012 Manning See the file license.txt for copying permission. --> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:key="pref_first_preferencescreen_key" android:title="Preferences"> <PreferenceCategory android:title="User"> <EditTextPreference android:key="pref_username" android:summary="Username:" android:title="Username"/> </PreferenceCategory> <PreferenceCategory android:title="Application"> <Preference android:key="pref_rate" android:summary="Rate the app in the store!" android:title="Rate the app"/> <Preference android:key="pref_share" android:summary="Share the app with your friends" android:title="Share it"/> <com.manning.androidhacks.hack004.preference.EmailDialog android:dialogIcon="@drawable/ic_launcher" android:dialogTitle="Send Feedback" android:dialogMessage="Do you want to send an email with feedback?" android:key="pref_sendemail_key" android:negativeButtonText="Cancel" android:positiveButtonText="OK" android:summary="Send your feedback by e-mail" android:title="Send Feedback"/> <com.manning.androidhacks.hack004.preference.AboutDialog android:dialogIcon="@drawable/ic_launcher" android:dialogTitle="About" android:key="pref_about_key" android:negativeButtonText="@null" android:title="About"/> </PreferenceCategory> </PreferenceScreen>
Main activity Java code
/******************************************************************************* * Copyright (c) 2012 Manning/*w w w. j a v a2 s .com*/ * See the file license.txt for copying permission. ******************************************************************************/ import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.net.Uri; import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.Preference; import android.preference.PreferenceActivity; public class MainActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.prefs); Preference sharePref = findPreference("pref_share"); Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.setType("text/plain"); shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Check this app!"); shareIntent.putExtra(Intent.EXTRA_TEXT, "Check this awesome app at: ..."); sharePref.setIntent(shareIntent); Preference ratePref = findPreference("pref_rate"); Uri uri = Uri.parse("market://details?id=" + getPackageName()); Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); ratePref.setIntent(goToMarket); updateUserText(); } @Override protected void onResume() { super.onResume(); getPreferenceScreen().getSharedPreferences() .registerOnSharedPreferenceChangeListener(this); } @Override protected void onPause() { super.onPause(); getPreferenceScreen().getSharedPreferences() .unregisterOnSharedPreferenceChangeListener(this); } @Override public void onSharedPreferenceChanged( SharedPreferences sharedPreferences, String key) { if (key.equals("pref_username")) { updateUserText(); } } private void updateUserText() { EditTextPreference pref; pref = (EditTextPreference) findPreference("pref_username"); String user = pref.getText(); if (user == null) { user = "?"; } pref.setSummary(String.format("Username: %s", user)); } }
Launch Email Util Java code
/******************************************************************************* * Copyright (c) 2012 Manning/* w w w . j a v a 2s .co m*/ * See the file license.txt for copying permission. ******************************************************************************/ package com.manning.androidhacks.hack004.util; import android.content.Context; import android.content.Intent; public class LaunchEmailUtil { public static void launchEmailToIntent(Context context) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("message/rfc822"); intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "feed@back.com" }); intent.putExtra(Intent.EXTRA_SUBJECT, "[50AH] Feedback"); intent.putExtra(Intent.EXTRA_TEXT, "Feedback:\n"); context .startActivity(Intent.createChooser(intent, "Send feedback")); } }
AboutDialog Java file
/******************************************************************************* * Copyright (c) 2012 Manning/* w w w . j av a 2 s. c o m*/ * See the file license.txt for copying permission. ******************************************************************************/ import android.content.Context; import android.content.pm.PackageManager.NameNotFoundException; import android.preference.DialogPreference; import android.text.Html; import android.text.method.LinkMovementMethod; import android.util.AttributeSet; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; public class AboutDialog extends DialogPreference { private Context mContext; private String mVersionNumber; public AboutDialog(Context context) { this(context, null); } public AboutDialog(Context context, AttributeSet attrs) { this(context, attrs, 0); } public AboutDialog(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mContext = context; } @Override protected View onCreateDialogView() { LinearLayout layout = new LinearLayout(mContext); layout.setOrientation(LinearLayout.VERTICAL); TextView splashText = new TextView(mContext); String fmt = "Version %s<br />" + "<a href=\"http://manning.com/sessa\">MoreInfo</a>"; try { String pkg = mContext.getPackageName(); mVersionNumber = mContext.getPackageManager().getPackageInfo(pkg, 0).versionName; } catch (NameNotFoundException e) { e.printStackTrace(); } if (mVersionNumber != null) { String aboutMsg = String.format(fmt, mVersionNumber); splashText.setText(Html.fromHtml(aboutMsg)); splashText.setMovementMethod(LinkMovementMethod.getInstance()); } layout.addView(splashText); return layout; } }
EmailDialog Java code
/******************************************************************************* * Copyright (c) 2012 Manning//w w w . j av a2s.c o m * See the file license.txt for copying permission. ******************************************************************************/ import android.content.Context; import android.content.DialogInterface; import android.preference.DialogPreference; import android.util.AttributeSet; public class EmailDialog extends DialogPreference { Context mContext; public EmailDialog(Context context) { this(context, null); } public EmailDialog(Context context, AttributeSet attrs) { this(context, attrs, 0); } public EmailDialog(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mContext = context; } @Override public void onClick(DialogInterface dialog, int which) { super.onClick(dialog, which); if (DialogInterface.BUTTON_POSITIVE == which) { LaunchEmailUtil.launchEmailToIntent(mContext); } } }