因客户需求SpinnerPreference,网上各种搜索不到,无奈只能重写组件,现将过程分享大家。

自定义SpinnerPreference

一:首先从扩展preference开始:类文件必须继承自Preference并实现构造函数,如下

public MySpinnerPreference(Context context) {        super(context);    }    public MySpinnerPreference(Context context, AttributeSet attrs) {        super(context, attrs);    }    public MySpinnerPreference(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);    }

二:自定义布局文件的重写

<?xml version="1.0" encoding="utf-8"?>                                

三:引用一个layout文件为其指定UI,可以通过实现如下两个回调函数:

  @Override    protected View onCreateView(ViewGroup parent) {        // TODO Auto-generated method stub        return super.onCreateView(parent);    }    @Override    protected void onBindView(View view) {        super.onBindView(view);        mSpinner = (Spinner) view.findViewById(R.id.spinner1);        String[] arraystr = view.getResources().getStringArray(R.array.itemspinner_values);        mAdapter = new ArrayAdapter(view.getContext(), android.R.layout.simple_spinner_dropdown_item, arraystr);        //  也可一自己定义适配器的样式        // mAdapter = new ArrayAdapter(view.getContext(), R.layout.preference_categoary, mMeausStr);        mSpinner.setAdapter(mAdapter);        mSpinner.setOnItemSelectedListener(this);    }

四:为组建添加需要的事件这里implementsOnItemSelectedListener

    @Override    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {        if (callChangeListener(position)) {            setValue(position);        }    }    @Override    public void onNothingSelected(AdapterView<?> parent) {    }

五:保存或持久化我们的改动

設置我們的改動

public void setValue(int value) {        // Always persist/notify the first time.        final boolean changed = !TextUtils.equals(Integer.toString(mValue), Integer.toString(value));        if (changed || !mValueSet) {            mValue = value;            mValueSet = true;            persistInt(value);            if (changed) {                notifyChanged();            }        }    }   @Override    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {        mPos = position;        if (callChangeListener(position)) {            setValue(position);        }    }

可以持久化多种基本数据类型

自定义 Android Preference——SpinnerPreference的私人定制_第1张图片


    @Override    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {        setValue(restoreValue ? getPersistedInt(mValue) : (Integer) defaultValue);    }

六效果圖



自定义 Android Preference——SpinnerPreference的私人定制_第2张图片






更多相关文章

  1. android 向serverGet和Post请求的两种方式,android向server发送
  2. android使用webview加载flash文件
  3. 修改Android中strings.xml文件
  4. Android获取sd卡上的文件目录-日记
  5. PC上安装android market软件并提取apk文件
  6. 通过终端命令生成并在手机上运行dex文件

随机推荐

  1. Flutter与Android的差异性
  2. Android(安卓)基于google Zxing实现二维
  3. Android(java)学习笔记120:Android中的Appli
  4. Android 8.0 新特性及开发指南
  5. android之Http协议编程01
  6. Android* 4.3 (Jelly Bean) x86 模拟器系
  7. Android的基本概念的小整理(二)
  8. 【OSC手机App技术解析】- 集成新浪微博An
  9. android系统学习笔记三
  10. 深入探讨Android----必不可少的高级功能