自定义android RadioPreference组件

  今天用到了android的preferences组件,可是android定义的preferrence组件只有:CheckboxBoxPrefrence、EditTextPreference
  、ListPreference等几个组件,可是公司要求我在preferences中用RadioButton,没办法只好自定义一个RadioPreference,方法如下:
  [b] 一、写一个只有RadioButton的layout: [/b]
  
  
  
  [b] 二、定义RadioPreference类: [/b]
  Java代码
  import android.app.Service;
  import android.content.Context;
  import android.content.SharedPreferences;
  import android.content.res.TypedArray;
  import android.os.Parcel;
  import android.os.Parcelable;
  import android.preference.Preference;
  import android.util.AttributeSet;
  import android.view.View;
  import android.view.accessibility.AccessibilityEvent;
  import android.view.accessibility.AccessibilityManager;
  import android.widget.Checkable;
  public class RadioPreference extends Preference {
  private CharSequence mSummaryOn;
  private CharSequence mSummaryOff;
  private boolean mSendAccessibilityEventViewClickedType;
  private AccessibilityManager mAccessibilityManager;
  private boolean mChecked;
  private boolean mDisableDependentsState;
  public RadioPreference(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  mAccessibilityManager = (AccessibilityManager) getContext()
  .getSystemService(Service.ACCESSIBILITY_SERVICE);
  }
  public RadioPreference(Context context, AttributeSet attrs) {
  super(context, attrs);
  mAccessibilityManager = (AccessibilityManager) getContext()
  .getSystemService(Service.ACCESSIBILITY_SERVICE);
  }
  public RadioPreference(Context context) {
  super(context);
  }
  @Override
  public boolean isPersistent() {
  return false;
  }
  @Override
  protected void onBindView(View view) {
  super.onBindView(view);
  View checkboxView = view.findViewById(com.lenovo.tmp.R.id.radiobutton) ;
  if (checkboxView != null && checkboxView instanceof Checkable) {
  ((Checkable) checkboxView).setChecked(mChecked);
  if (mSendAccessibilityEventViewClickedType
  && mAccessibilityManager.isEnabled()
  && checkboxView.isEnabled()) {
  mSendAccessibilityEventViewClickedType = false;
  int eventType = AccessibilityEvent.TYPE_VIEW_CLICKED;
  checkboxView.sendAccessibilityEventUnchecked(Acces sibilityEvent
  .obtain(eventType));
  }
  }
  }
  @Override
  protected void onClick() {
  super.onClick();
  boolean newValue = !isChecked();
  mSendAccessibilityEventViewClickedType = true;
  if (!callChangeListener(newValue)) {
  return;
  }
  setChecked(newValue);
  }
  /**
  * Sets the checked state and saves it to the {@link SharedPreferences}.
  *
  * @param checked
  * The checked state.
  */
  public void setChecked(boolean checked) {
  if (mChecked != checked) {
  mChecked = checked;
  persistBoolean(checked);
  notifyDependencyChange(shouldDisableDependents());
  notifyChanged();
  }
  }
  /**
  * Returns the checked state.
  *
  * @return The checked state.
  */
  public boolean isChecked() {
  return mChecked;
  }
  @Override
  public boolean shouldDisableDependents() {
  boolean shouldDisable = mDisableDependentsState ? mChecked : !mChecked;
  return shouldDisable || super.shouldDisableDependents();
  }
  /**
  * Sets the summary to be shown when checked.
  *
  * @param summary
  * The summary to be shown when checked.
  */
  public void setSummaryOn(CharSequence summary) {
  mSummaryOn = summary;
  if (isChecked()) {
  notifyChanged();
  }
  }
  /**
  * @see #setSummaryOn(CharSequence)
  * @param summaryResId
  * The summary as a resource.
  */
  public void setSummaryOn(int summaryResId) {
  setSummaryOn(getContext().getString(summaryResId)) ;
  }
  /**
  * Returns the summary to be shown when checked.
  *
  * @return The summary.
  */
  public CharSequence getSummaryOn() {
  return mSummaryOn;
  }
  /**
  * Sets the summary to be shown when unchecked.
  *
  * @param summary
  * The summary to be shown when unchecked.
  */
  public void setSummaryOff(CharSequence summary) {
  mSummaryOff = summary;
  if (!isChecked()) {
  notifyChanged();
  }
  }
  /**
  * @see #setSummaryOff(CharSequence)
  * @param summaryResId
  * The summary as a resource.
  */
  public void setSummaryOff(int summaryResId) {
  setSummaryOff(getContext().getString(summaryResId) );
  }
  /**
  * Returns the summary to be shown when unchecked.
  *
  * @return The summary.
  */
  public CharSequence getSummaryOff() {
  return mSummaryOff;
  }
  /**
  * Returns whether dependents are disabled when this preference is on (
  * {@code true}) or when this preference is off ({@code false}).
  *
  * @return Whether dependents are disabled when this preference is on (
  * {@code true}) or when this preference is off ({@code false}).
  */
  public boolean getDisableDependentsState() {
  return mDisableDependentsState;
  }
  /**
  * Sets whether dependents are disabled when this preference is on (
  * {@code true}) or when this preference is off ({@code false}).
  *
  * @param disableDependentsState
  * The preference state that should disable dependents.
  */
  public void setDisableDependentsState(boolean disableDependentsState) {
  mDisableDependentsState = disableDependentsState;
  }
  @Override
  protected Object onGetDefaultValue(TypedArray a, int index) {
  return a.getBoolean(index, false);
  }
  @Override
  protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
  setChecked(restoreValue ? getPersistedBoolean(mChecked)
  : (Boolean) defaultValue);
  }
  @Override
  protected Parcelable onSaveInstanceState() {
  final Parcelable superState = super.onSaveInstanceState();
  if (isPersistent()) {
  // No need to save instance state since it's persistent
  return superState;
  }
  final SavedState myState = new SavedState(superState);
  myState.checked = isChecked();
  return myState;
  }
  @Override
  protected void onRestoreInstanceState(Parcelable state) {
  if (state == null || !state.getClass().equals(SavedState.class)) {
  // Didn't save state for us in onSaveInstanceState
  super.onRestoreInstanceState(state);
  return;
  }
  SavedState myState = (SavedState) state;
  super.onRestoreInstanceState(myState.getSuperState ());
  setChecked(myState.checked);
  }
  private static class SavedState extends BaseSavedState {
  boolean checked;
  public SavedState(Parcel source) {
  super(source);
  checked = source.readInt() == 1;
  }
  @Override
  public void writeToParcel(Parcel dest, int flags) {
  super.writeToParcel(dest, flags);
  dest.writeInt(checked ? 1 : 0);
  }
  public SavedState(Parcelable superState) {
  super(superState);
  }
  public static final Parcelable.Creator CREATOR = newParcelable.Creator() {
  public SavedState createFromParcel(Parcel in) {
  return new SavedState(in);
  }
  public SavedState[] newArray(int size) {
  return new SavedState[size];
  }
  };
  }
  }
  [b] 三、使用该组件: [/b]
  
  
  
  
  
  
  
  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值