1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
/* The following code was written by Matthew Wiggins
* and is released under the APACHE 2.0 license
*
* Modified by Kevin Gaudin : constructor now retrieves resources references values
*
* http://www.apache.org/licenses/LICENSE-2.0
*/
package com.hlidskialf.android.preference;
import android.content.Context;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;
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;
}
}
|