Android自定义控件——自定义Preference

如图定义一个颜色选择的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;
		}
	};

	

}



posted @ 2015-02-26 19:40  顾明伟  阅读(1073)  评论(0编辑  收藏  举报