自定义 DialogPreference 代碼備份

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);
			}
		}
	};
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自定义 Android DialogPreference,您可以按照以下步骤进行操作: 1. 创建一个新的类,扩展 DialogPreference 类,并实现构造函数和 onDialogClosed() 方法。 ```java public class CustomDialogPreference extends DialogPreference { public CustomDialogPreference(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); if (positiveResult) { // 在此处保存用户的选择 } } } ``` 2. 在 res/values/ 文件夹下创建一个名为 attrs.xml 的文件,在其中定义自定义属性。 ```xml <resources> <declare-styleable name="CustomDialogPreference"> <attr name="custom_attr" format="string" /> </declare-styleable> </resources> ``` 3. 在 res/layout/ 文件夹下创建一个 XML 布局文件,定义您的自定义对话框布局。 ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- 在此处添加您的布局元素 --> </LinearLayout> ``` 4. 在 CustomDialogPreference 类中添加 showDialog() 方法,并在其中加载您的自定义对话框布局。 ```java public class CustomDialogPreference extends DialogPreference { public CustomDialogPreference(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); if (positiveResult) { // 在此处保存用户的选择 } } @Override protected void showDialog(Bundle state) { super.showDialog(state); Dialog dialog = getDialog(); dialog.setContentView(R.layout.custom_dialog_layout); // 在此处添加逻辑来初始化对话框元素 } } ``` 5. 在您的首选项 XML 文件中使用 CustomDialogPreference。 ```xml <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <com.example.CustomDialogPreference android:key="custom_dialog_preference" android:title="Custom Dialog Preference" custom_attr="some value" /> </PreferenceScreen> ``` 注意:在步骤 5 中,您需要将 com.example 替换为您的应用程序的包名。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值