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

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

  • android:dialogMessage 显示对话框中的文本信息
  • android:text 在选择进度条后,显示的文本信息
  • android:maxSeekBar的最大值
                  /*           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"
/>

更多相关文章

  1. Android基础控件——ProgressBar自定义的介绍、动画效果实现、附
  2. Android 监听EditText文本输入 EditText监听事和输入事件
  3. Android 多线程更新控件
  4. Android又一个超漂亮的日历控件
  5. Android studio RelativeLayout相对布局(控件相对父控件摆放-左上
  6. android 控件绘制完成的监听
  7. Android之获取、设置EditText的文本...
  8. Android UI控件详解-AutoComplete-TextView(自动提示)
  9. android仿ipone滑动解锁控件

随机推荐

  1. Android(安卓)SDK腾讯镜像
  2. SearchView 自动展开和弹出输入法
  3. android 应用程序使用统计
  4. Android(安卓)Apkshare
  5. Android(安卓)Fresco监听回调,成功调回Bi
  6. Android(安卓)AlertDialog背景透明
  7. android仿照ipone的弹性效果
  8. android 自定义对话框宽不能占满父layout
  9. android new feature on 4.2
  10. android 颜色(color)