如图定义一个颜色选择的Preference
思路:继承Preference,重写onCreateView
前提:需要一个布局文件,TextView显示文本,ImageView显示颜色
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/preference_electric_color_layout" android:layout_width="match_parent" android:layout_height="60dip" android:gravity="center_vertical" android:orientation="horizontal" > <TextView android:id="@+id/preference_electric_color_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="7dip" android:text="@string/electric_effect_color" android:textSize="18sp" /> <ImageView android:id="@+id/preference_electric_color_indicator" android:layout_width="30dip" android:layout_height="30dip" android:layout_alignParentRight="true" android:layout_alignTop="@+id/preference_electric_color_title" android:layout_marginRight="18dp" android:background="#6669FD" /> </RelativeLayout>
public class ColorPickPreference extends Preference { private View mContentView; public static ImageView mImageView; public ColorPickPreference(Context context) { super(context); } public ColorPickPreference(Context context, AttributeSet attrs) { super(context, attrs); } public ColorPickPreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected View onCreateView(ViewGroup parent) { mContentView = LayoutInflater.from(getContext()).inflate( R.layout.preference_color_picker, parent, false); initView(mContentView); return mContentView; } private void initView(View mView) { mImageView = (ImageView) mView .findViewById(R.id.preference_electric_color_indicator); mImageView.setBackgroundColor(SettingHelper.getPreferenceInt( getContext(), getContext().getResources().getString( R.string.electric_effect_color_key), ColorResource.DEFAULT_COLOR)); } }
使用:包名.类名
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <PreferenceCategory android:title="Effect" > <com.coolapp.electricscreen.colorpicker.ColorPickPreference android:defaultValue="@color/electric_default_color" android:key="@string/electric_effect_color_key" /> <CheckBoxPreference android:defaultValue="@bool/electric_effect_sound_def" android:key="@string/electric_effect_sound_key" android:title="@string/electric_effect_sound" /> <CheckBoxPreference android:defaultValue="@bool/electric_effect_vibrator_def" android:key="@string/electric_effect_vibrator_key" android:title="@string/electric_effect_vibrator" /> <CheckBoxPreference android:defaultValue="@bool/electric_effect_auto_def" android:key="@string/electric_effect_auto_key" android:title="@string/electric_effect_auto" /> </PreferenceCategory> </PreferenceScreen>
public class ElectricPreference extends PreferenceActivity { private ColorPickPreference mPreferenceColorPick; private CheckBoxPreference mPreferenceSound; private CheckBoxPreference mPreferenceVibrator; private CheckBoxPreference mPreferencAuto; private int resoultColor; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preference); setTitle(getResources().getString(R.string.action_settings)); initPreference(getResources()); } @SuppressLint("NewApi") @SuppressWarnings("deprecation") private void initPreference(Resources resources) { SharedPreferences mSharedPreferences = getPreferenceScreen() .getSharedPreferences(); mPreferenceColorPick = (ColorPickPreference) findPreference(resources .getString(R.string.electric_effect_color_key)); mPreferenceSound = (CheckBoxPreference) findPreference(resources .getString(R.string.electric_effect_sound_key)); mPreferenceVibrator = (CheckBoxPreference) findPreference(resources .getString(R.string.electric_effect_vibrator_key)); mPreferencAuto = (CheckBoxPreference) findPreference(resources .getString(R.string.electric_effect_auto_key)); mPreferenceSound.setChecked(mSharedPreferences.getBoolean( getResources().getString(R.string.electric_effect_sound_key), true)); mPreferenceVibrator.setChecked(mSharedPreferences .getBoolean( getResources().getString( R.string.electric_effect_vibrator_key), true)); mPreferencAuto.setChecked(mSharedPreferences.getBoolean(getResources() .getString(R.string.electric_effect_auto_key), true)); mPreferenceColorPick .setOnPreferenceClickListener(mPreferenceClickListener); mPreferenceSound.setOnPreferenceClickListener(mPreferenceClickListener); mPreferenceVibrator .setOnPreferenceClickListener(mPreferenceClickListener); mPreferencAuto.setOnPreferenceClickListener(mPreferenceClickListener); } protected void onResume() { super.onResume(); SharedPreferences mSharedPreferences = getPreferenceScreen() .getSharedPreferences(); // mPreferenceColorPick.setIndicatorColor(resoultColor); Log.i("ABC", "onResume_sound:" + mSharedPreferences.getBoolean(getResources() .getString(R.string.electric_effect_sound_key), true)); Log.i("ABC", "onResume_vibrator:" + mSharedPreferences.getBoolean( getResources().getString( R.string.electric_effect_vibrator_key), true)); mPreferenceSound.setChecked(mSharedPreferences.getBoolean( getResources().getString(R.string.electric_effect_sound_key), true)); mPreferenceVibrator.setChecked(mSharedPreferences .getBoolean( getResources().getString( R.string.electric_effect_vibrator_key), true)); mPreferencAuto.setChecked(mSharedPreferences.getBoolean(getResources() .getString(R.string.electric_effect_auto_key), true)); // } OnPreferenceClickListener mPreferenceClickListener = new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference arg0) { SharedPreferences mSharedPreferences = getPreferenceScreen() .getSharedPreferences(); if (arg0 == mPreferenceColorPick) { } else if (arg0 == mPreferenceSound) { } else if (arg0 == mPreferenceVibrator) { } else if (arg0 == mPreferencAuto) { } return false; } }; }