import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
public class ArticleTextFontPreference extends DialogPreference {
public ArticleTextFontPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
private SeekBar mLuminance = null;
private TextView mTextTip = null;
private SharedPreferences mShare;
// private float mChangedTextSize;
private int mChangedTextSize;
// private float mChangeBeforeTextSize;
private int mChangeBeforeTextSize;
private final int mSeekBarMax = 200;
@Override
protected void onPrepareDialogBuilder(Builder builder) {
super.onPrepareDialogBuilder(builder);
mShare = getPreferenceManager().getSharedPreferences();
View view = LayoutInflater.from(getContext()).inflate(
R.layout.setting_text_window, null);
mLuminance = (SeekBar) view.findViewById(R.id.text_bar);
// float currSize = mShare.getFloat(getKey(), -1.0f);
int currSize = mShare.getInt(getKey(), -1);
// if (currSize == -1.0f) {
if (currSize == -1) {
currSize = ARTICLE_CONTENT_SIZE;
}
mLuminance.setOnSeekBarChangeListener(mLimunanceChangeListener);
mLuminance.setMax(mSeekBarMax);
int progress = getProgressBySize(currSize);
mLuminance.setProgress(progress);
mChangeBeforeTextSize = currSize;
mChangedTextSize = currSize;
mTextTip = (TextView) view.findViewById(R.id.text_tip);
updateTextSize(currSize);
// mTextTip.setTextSize(currSize);
builder.setView(view)
.setPositiveButton(R.string.dialog_yes,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
updateTextSize(mChangedTextSize);
// mShare.edit()
// .putFloat(
// ArticleTextFontPreference.this
// .getKey(),
// mChangedTextSize).commit();
mShare.edit()
.putInt(
ArticleTextFontPreference.this
.getKey(),
mChangedTextSize).commit();
setSummary("当前字体大小为" + mChangedTextSize + "号");
}
})
.setNegativeButton(R.string.dialog_no,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
updateTextSize(mChangeBeforeTextSize);
}
});
}
private int getProgressBySize(float size) {
return (int) ((size - ARTICLE_CONTENT_MIN_SIZE)
* mSeekBarMax / (ARTICLE_CONTNET_MAX_SIZE - ARTICLE_CONTENT_MIN_SIZE));
}
private float getSizeByProgress(int progress) {
return ARTICLE_CONTENT_MIN_SIZE
+ (ARTICLE_CONTNET_MAX_SIZE - ARTICLE_CONTENT_MIN_SIZE)
* progress / mSeekBarMax;
}
// private void updateTextSize(float size) {
//
// mTextTip.setTextSize(size);
// DecimalFormat dFormat = new DecimalFormat("##0.0");
// String tip = getContext().getString(R.string.setting_article_size_tip)
// .trim() + dFormat.format(size);
// mTextTip.setText(tip);
// }
private void updateTextSize(int size){
mTextTip.setTextSize(size);
String tip = getContext().getString(R.string.setting_article_size_tip)
.trim() + size;
mTextTip.setText(tip);
}
private OnSeekBarChangeListener mLimunanceChangeListener = new OnSeekBarChangeListener() {
@SuppressWarnings("unused")
private int currProgress = 0;
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if (fromUser) {
currProgress = progress;
mChangedTextSize = (int) getSizeByProgress(progress);
updateTextSize(mChangedTextSize);
}
}
};
}
2、屏幕亮度
import android.app.Activity;
import android.app.AlertDialog.Builder;
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.preference.DialogPreference;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
public class LuminancePreference extends DialogPreference {
private SeekBar mLuminance = null;
// private SharedPreferences mShare;
// private ContentResolver mContentRes;
private int mChangedBrightness;
private int mChangeBeforeBrightness;
private ZakerShareDB_II db2 = null;
// private Context context = null;
public LuminancePreference(Context context, AttributeSet attrs) {
super(context, attrs);
// this.context = context;
// mContentRes = context.getContentResolver();
db2 = ZakerShareDB_II.getInstance(context);
}
@Override
protected void onPrepareDialogBuilder(Builder builder) {
super.onPrepareDialogBuilder(builder);
// mShare = getPreferenceManager().getSharedPreferences();
View view = LayoutInflater.from(getContext()).inflate(
R.layout.setting_luminance_window, null);
mLuminance = (SeekBar) view.findViewById(R.id.luminance_bar);
mLuminance.setMax(255);
// int luminance_progress = mShare.getInt(getKey(), -1);
int luminance_progress = getScreenBrightnessFromPreference(db2);
if (luminance_progress == -1) {
Activity activity = (Activity) getContext();
luminance_progress = getScreenBrightness(activity);
mLuminance.setProgress(luminance_progress);
} else {
mLuminance.setProgress(luminance_progress);
}
Log.d("TAG", "�����ǣ�" + luminance_progress);
mLuminance.setProgress(luminance_progress);
mChangeBeforeBrightness = luminance_progress;
mLuminance.setOnSeekBarChangeListener(mLimunanceChangeListener);
builder.setView(view)
.setPositiveButton(R.string.dialog_yes,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// saveBrightness(mContentRes,
// mChangedBrightness);
// saveBrightnessToPreference(mChangedBrightness/mLuminance.getMax());
if (mChangedBrightness == 0) {
db2.putScreenBrightness((mChangeBeforeBrightness * 1.0f)
/ (mLuminance.getMax() * 1.0f));
} else {
float f = (mChangedBrightness * 1.0f)
/ (mLuminance.getMax() * 1.0f);
db2.putScreenBrightness(f);
Log.d("TAG", "���������" + f);
}
Log.d("TAG", "ԭ��������"
+ mChangeBeforeBrightness
+ " �ı�������" + mChangedBrightness);
// mShare.edit().putInt(LuminancePreference.this.getKey(),
// mChangedBrightness).commit();
}
})
.setNegativeButton(R.string.dialog_no,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
setLimunance(mChangeBeforeBrightness);
}
});
}
/**
* ������Ļ����
*
* @param currProgress
* ȡֵ��Χ��0~mLuminance.getMax()
*/
private void setLimunance(int currProgress) {
Context mCxt = getContext();
Activity activity = ((Activity) mCxt);
ContentResolver contentRes = activity.getContentResolver();
if (isAutoBrightness(contentRes)) {
stopAutoBrightness(activity);
}
WindowManager.LayoutParams lp = ((Activity) mCxt).getWindow()
.getAttributes();
float brightness = (currProgress * 1.0f) / (mLuminance.getMax() * 1.0f);
float _brightness = (brightness == 0.0f) ? 0.01f : brightness;
int bright = currProgress;
lp.screenBrightness = (_brightness);
((Activity) mCxt).getWindow().setAttributes(lp);
// saveBrightness(contentRes, bright);
mChangedBrightness = bright;
}
private boolean isAutoBrightness(ContentResolver aContentResolver) {
boolean automicBrightness = false;
try {
automicBrightness = Settings.System.getInt(aContentResolver,
Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
} catch (SettingNotFoundException e) {
e.printStackTrace();
}
return automicBrightness;
}
private void stopAutoBrightness(Activity activity) {
Settings.System.putInt(activity.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
}
public void startAutoBrightness(Activity activity) {
Settings.System.putInt(activity.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
}
private int getScreenBrightness(Activity activity) {
int nowBrightnessValue = 0;
ContentResolver resolver = activity.getContentResolver();
try {
nowBrightnessValue = android.provider.Settings.System.getInt(
resolver, Settings.System.SCREEN_BRIGHTNESS);
} catch (Exception e) {
e.printStackTrace();
}
return nowBrightnessValue;
}
private int getScreenBrightnessFromPreference(ZakerShareDB_II as2) {
int nowBrightnessValue = -1;
float f = as2.getScreenBrightness();
if (f == 0.01f) {
Activity activity = (Activity) getContext();
nowBrightnessValue = getScreenBrightness(activity);
as2.putScreenBrightness(nowBrightnessValue / mLuminance.getMax());
} else {
nowBrightnessValue = (int) (f * mLuminance.getMax());
}
return nowBrightnessValue;
}
// private void saveBrightness(ContentResolver resolver, int brightness) {
// Uri uri = android.provider.Settings.System
// .getUriFor("screen_brightness");
// android.provider.Settings.System.putInt(resolver, "screen_brightness",
// brightness);
// resolver.notifyChange(uri, null);
// }
/**
* ����SeekBar������
*/
private OnSeekBarChangeListener mLimunanceChangeListener = new OnSeekBarChangeListener() {
private int currProgress = 0;
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// mShare.edit().putInt(MyDialogPreference.this.getKey(),
// currProgress).commit();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// ��δ��벢δʹ��formUser�ж�,���...
if (fromUser) {
if (progress <= 30) {
progress = 30;
}
currProgress = progress;
setLimunance(currProgress);
}
}
};
}