package org.paulmach.textedit; import java.util.Arrays; import java.util.List; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.graphics.Color; import android.preference.DialogPreference; import android.preference.PreferenceManager; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; /* FontTypePreference * Special file type preference so that each option is actually * an example of the font. */ public class FontSizePreference extends DialogPreference { private List<String> fonts = null; private int selected; // This is the constructor called by the inflater public FontSizePreference(Context context, AttributeSet attrs) { super(context, attrs); // figure out the current size. SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext()); String font = sharedPref.getString("fontsize", "Medium"); if (font.equals("Extra Small")) selected = 0; else if (font.equals("Small")) selected = 1; else if (font.equals("Medium")) selected = 2; else if (font.equals("Large")) selected = 3; else if (font.equals("Huge")) selected = 4; } @Override protected void onPrepareDialogBuilder(AlertDialog.Builder builder){ // Data has changed, notify so UI can be refreshed! builder.setTitle("Choose a font type"); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // save the choice in the preferences Editor editor = PreferenceManager.getDefaultSharedPreferences(getContext()).edit(); if (selected == 0) editor.putString("fontsize", "Extra Small"); else if (selected == 1) editor.putString("fontsize", "Small"); else if (selected == 2) editor.putString("fontsize", "Medium"); else if (selected == 3) editor.putString("fontsize", "Large"); else if (selected == 4) editor.putString("fontsize", "Huge"); editor.commit(); notifyChanged(); } }); builder.setNegativeButton("Cancel", null); // load the font names and create the adapter String[] arrayOfFonts = {"Extra Small", "Small", "Medium", "Large", "Huge"}; fonts = Arrays.asList(arrayOfFonts); FontTypeArrayAdapter adapter = new FontTypeArrayAdapter(getContext(), android.R.layout.simple_list_item_single_choice, fonts); builder.setSingleChoiceItems(adapter, selected, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // make sure we know what is selected selected = which; } }); } // onPrepareDialogBuilder() /******************************************************************** * class FontTypeArrayAdapter * Array adapter for font type picker */ public class FontTypeArrayAdapter extends ArrayAdapter<String> { // just a basic constructor public FontTypeArrayAdapter(Context context, int resource, List<String> objects) { super(context, resource, objects); } // end constructor one /**************************************************************** * getView * the overroad getView method */ public View getView(int position, View convertView, ViewGroup parent) { // get the view that would normally be returned View v = super.getView(position, convertView, parent); final TextView tv = (TextView) v; final String option = tv.getText().toString(); if (option.equals("Extra Small")) tv.setTextSize(12.0f); else if (option.equals("Small")) tv.setTextSize(16.0f); else if (option.equals("Medium")) tv.setTextSize(20.0f); else if (option.equals("Large")) tv.setTextSize(24.0f); else if (option.equals("Huge")) tv.setTextSize(28.0f); // general options tv.setTextColor(Color.BLACK); tv.setPadding(10, 3, 3, 3); return v; } // end getView() } // end class FontTypeArrayAdapter } // end class ClearListPreference