由於網上有很多人問到SeekBarPreference怎麼去實現,今天將這個效果做出來,本例子並沒有真正的改變屏幕亮度,如果真正想去實現,那麼可以在這個類中onProgressChanged()方法或者onDialogClosed()方法中寫上自己調節亮度的代碼,並將這些值保存起來。
1.首先定義一個類SeekBarPreference繼承於DialogPreference的類:
package com.kewen.systeminfo;
import android.content.Context;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.SeekBar.OnSeekBarChangeListener;
public class SeekBarPreference extends DialogPreference implements
OnSeekBarChangeListener {
private SeekBar seekBar;
private TextView textView;
public SeekBarPreference(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
protected void onBindDialogView(View view) {
// TODO Auto-generated method stub
super.onBindDialogView(view);
seekBar = (SeekBar) view.findViewById(R.id.seekBar1);
textView = (TextView) view.findViewById(R.id.textView1);
seekBar.setOnSeekBarChangeListener(this);
}
@Override
protected void onDialogClosed(boolean positiveResult) {
// TODO Auto-generated method stub
if (positiveResult) {
Log.i("Dialog closed", "You click positive button");
} else {
Log.i("Dialog closed", "You click negative button");
}
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
textView.setText(progress + "% " + progress + "/100");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
}
2.以上實現的爲一個對話框式的Preference,也就是SeekBar將會旋轉在一個DialogPreference上,以下爲DialogPreference的dialogLayout文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <SeekBar android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/seekBar1" android:layout_marginLeft="20dip" android:layout_marginRight="10dip" android:max="100" android:progress="60"></SeekBar> <TextView android:text="TextView" android:id="@+id/textView1" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_marginLeft="20dip" ></TextView> </LinearLayout>
3.將寫好的自定義Preference類放到定義preference的xml文件中:
<com.kewen.systeminfo.SeekBarPreference android:dialogTitle="亮度調整" android:title="調整亮度" android:summary="調整屏幕的亮度" android:key="light" android:dialogLayout="@layout/seekbar"> </com.kewen.systeminfo.SeekBarPreference>
以上三步爲實現這個效果的關鍵代碼,以下還會有DatePickerPreference、TimePickerPreference出現