如图定义一个颜色选择的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>
Java
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>
java 使用和正常的Preference一样使用就可以,初始化用findPreference,监听单击事件用OnPreferenceClickListener
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;
}
};
}