/** * SeekbarPreference.java * * Ver 1.0, 2012-12-9, alex_yh, Create file. */ package com.flounder.fishDiary.view; import android.content.Context; import android.content.SharedPreferences; import android.preference.DialogPreference; import android.util.AttributeSet; import android.view.View; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import com.flounder.fishDiary.FishPreferences; import com.flounder.fishDiary.R; public class SeekbarPreference extends DialogPreference implements OnSeekBarChangeListener { private int mValue; private int oldValue; private int minValue = 10; private TextView mTvTextSize; private SeekBar mSeekbar; @Override protected void onBindDialogView(View view) { super.onBindDialogView(view); if (mValue <= minValue) { mValue = FishPreferences.getTextSize(getContext()); } oldValue = mValue; mTvTextSize = (TextView) view.findViewById(R.id.tv_text_size); mTvTextSize.setText(mValue + ""); mSeekbar = (SeekBar) view.findViewById(R.id.sb_text_size); mSeekbar.setOnSeekBarChangeListener(this); mSeekbar.setProgress(mValue - minValue); } public SeekbarPreference(Context context, AttributeSet attrs) { super(context, attrs); this.setDialogLayoutResource(R.layout.setting_textsize_seekbar); } @Override protected void onDialogClosed(boolean positiveResult) { if (positiveResult) { SharedPreferences.Editor editor = FishPreferences .getEditor(getContext()); editor.putInt(FishPreferences.KEY_TEXT_SIZE, mValue); editor.commit(); } else { mValue = oldValue; } } @Override public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) { int size = progress + minValue; mTvTextSize.setText(size + ""); // This is extremely lightweight, just // do it in UI thread } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { mValue = seekBar.getProgress() + minValue; } }