下面介绍SeekBarPreference控件,保存的Value为数字值,直接可以在preferences.xml文件中使用无需其他代码。

下面是控件使用到得标准Android属性

  • android:dialogMessage 显示对话框中的文本信息
  • android:text  在选择进度条后,显示的文本信息
  • android:max SeekBar的最大值
/* The following code was written by Matthew Wiggins
* and is released under the APACHE 2.0 license
*
* http://www.apache.org/licenses/LICENSE-2.0
*/
package com.hlidskialf.android.preference;

import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.preference.DialogPreference;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.LinearLayout;

public class SeekBarPreference extends DialogPreference implements SeekBar.OnSeekBarChangeListener
{
private static final String androidns="http://schemas.android.com/apk/res/android";

private SeekBar mSeekBar;
private TextView mSplashText,mValueText;
private Context mContext;

private String mDialogMessage, mSuffix;
private int mDefault, mMax, mValue = 0;

public SeekBarPreference(Context context, AttributeSet attrs) {
super(context,attrs);
mContext = context;

mDialogMessage = attrs.getAttributeValue(androidns,"dialogMessage");
mSuffix = attrs.getAttributeValue(androidns,"text");
mDefault = attrs.getAttributeIntValue(androidns,"defaultValue", 0);
mMax = attrs.getAttributeIntValue(androidns,"max", 100);

}
@Override
protected View onCreateDialogView() {
LinearLayout.LayoutParams params;
LinearLayout layout = new LinearLayout(mContext);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setPadding(6,6,6,6);

mSplashText = new TextView(mContext);
if (mDialogMessage != null)
mSplashText.setText(mDialogMessage);
layout.addView(mSplashText);

mValueText = new TextView(mContext);
mValueText.setGravity(Gravity.CENTER_HORIZONTAL);
mValueText.setTextSize(32);
params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
layout.addView(mValueText, params);

mSeekBar = new SeekBar(mContext);
mSeekBar.setOnSeekBarChangeListener(this);
layout.addView(mSeekBar, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));

if (shouldPersist())
mValue = getPersistedInt(mDefault);

mSeekBar.setMax(mMax);
mSeekBar.setProgress(mValue);
return layout;
}
@Override
protected void onBindDialogView(View v) {
super.onBindDialogView(v);
mSeekBar.setMax(mMax);
mSeekBar.setProgress(mValue);
}
@Override
protected void onSetInitialValue(boolean restore, Object defaultValue)
{
super.onSetInitialValue(restore, defaultValue);
if (restore)
mValue = shouldPersist() ? getPersistedInt(mDefault) : 0;
else
mValue = (Integer)defaultValue;
}

public void onProgressChanged(SeekBar seek, int value, boolean fromTouch)
{
String t = String.valueOf(value);
mValueText.setText(mSuffix == null ? t : t.concat(mSuffix));
if (shouldPersist())
persistInt(value);
callChangeListener(new Integer(value));
}
public void onStartTrackingTouch(SeekBar seek) {}
public void onStopTrackingTouch(SeekBar seek) {}

public void setMax(int max) { mMax = max; }
public int getMax() { return mMax; }

public void setProgress(int progress) {
mValue = progress;
if (mSeekBar != null)
mSeekBar.setProgress(progress);
}
public int getProgress() { return mValue; }
}

下面是在XML layout的例子

<com.hlidskialf.android.preference.SeekBarPreference android:key="duration"
android:title="Duration of something"
android:summary="How long something will last"
android:dialogMessage="Something duration"
android:defaultValue="5"
android:text=" minutes"
android:max="60"
/>

自定义SeekBarPreference控件(老外出品,直接在preferences文件中使用,无需其他代码)...相关推荐

  1. 自定义UI控件:继承UIlabel,使label中的文字居上,居中,居下

    一般来说,在ios里面label中的文字垂直方向上是默认居中的,如果想要设置居上或者居下,在xib文件里面不能设置,只能自定义一个UI控件. label文字的水平位置,可以在xib文件中直接设置. i ...

  2. Android 手机卫士--自定义组合控件构件布局结构

    由于设置中心条目中的布局都很类似,所以可以考虑使用自定义组合控件来简化实现 本文地址:http://www.cnblogs.com/wuyudong/p/5909043.html,转载请注明源地址. ...

  3. Android View体系(十)自定义组合控件

    相关文章 Android View体系(一)视图坐标系 Android View体系(二)实现View滑动的六种方法 Android View体系(三)属性动画 Android View体系(四)从源 ...

  4. iOS自定义View 控件自动计算size能力

    iOS自定义View 控件自动计算size能力 背景 在使用 UILabel 和 UIImage 的时候,不用指定宽高约束,控件也不会报约束缺失,还可以根据内容自己确定适合的宽高,特别适合 Xib 和 ...

  5. VS2010 自定义用户控件未出现在工具箱的解决方案

    VS2010 自定义用户控件未出现在工具箱的解决方案 参考文章: (1)VS2010 自定义用户控件未出现在工具箱的解决方案 (2)https://www.cnblogs.com/lyout/arch ...

  6. [置顶] 分步实现具有分页功能的自定义DataList控件【附源代码】

    一.控件也是类 [效果] [操作步骤] 1.  新建网站Web 2.  添加类CustomDataList.cs(系统会提示你把类建在App_Code文件夹中),代码如下: using System; ...

  7. [转] 使用模板自定义 WPF 控件

      [转] 使用模板自定义 WPF 控件                                                                                 ...

  8. 自定义组合控件:下拉选择框

    Spinner 自定义组合控件之下拉选择框 项目概述 下拉选择框主要是通过在EditText 下用PopupWindow 动态显示ListView 控件来实现的.下拉选择框可以方便用户的输入效率,以此 ...

  9. 自定义组合控件:Banner、轮播图、广告栏控件

    1. 项目概述 这里,我们使用自定义组合控件实现一个自动轮播的广告条,也叫轮播图,完整版的效果图如下图所示.其实,这就是我们经常见到的滚动广告,默认情况下每隔N 秒会自动滚动,用手指左右滑动时也会切换 ...

最新文章

  1. linux一键重装系统脚本,一键重装CentOS纯净版系统shell脚本
  2. SynchronizationContext
  3. ubuntu 编译 /usr/bin/ld: cannot find 问题解决
  4. 最简单的java单例
  5. 程序代码错误检测_错误检测代码
  6. 数据的表示方法和运算方法
  7. 20140213-面向对象技术概论
  8. 微软.net framework工具集帮助
  9. Leetcode - Reverse Words
  10. postman支持socket吗_如何使用postman测试接口webservice?
  11. 结构建模设计——Solidworks 2021SP5稳定版软件安装详细教程(安装踩坑记录全流程总结)
  12. WORD中的格式控制符号
  13. FOI2019算法冬令营D1
  14. 为什么平方损失函数不适应于分类问题?——从概率论的角度
  15. 关于Spring Bean的生命周期
  16. spin_lock到spin_lock_irqsave的使用
  17. <网络概述>——《计算机网络》
  18. Ubuntu 10.04环境下载编译Android-2.2.1 (froyo) 源代码 1/2
  19. 服务器2012还原系统,Windows Server 2012升级R2过程中意外关闭恢复原系统方法
  20. Java 使用ZipOutputStream 进行打包操作

热门文章

  1. python之模块csv之CSV文件的写入(按行写入)
  2. VS2010与.NET4系列 20.VS2010的JavaScript智能感知增强
  3. Timestamp、String、Date之间的转换
  4. web service 基础学习
  5. windows聚焦壁纸不更新_技术编辑示范win10系统锁屏壁纸聚焦不更新的处理教程
  6. unicode字符显示方框_【硬核】韦东山:字符的编码方式
  7. Go 语言编程 — 并发 — Goroutine 协程
  8. PythonScript_demo--搭建PXE服务器
  9. Cannot create file Altium\AD15\Library\BSDL\Generic\BSDL_FileMap.txt.拒绝访问
  10. Simulink仿真---SVPWM算法