Android 自定义Preference

CustomPreference
package com.rasa.game;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.res.TypedArray;
import android.preference.Preference;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class CustomPreference extends Preference {
private int mClickCounter = 100;
private Button ok_button = null;

// This is the constructor called by the inflater
public CustomPreference(Context context, AttributeSet attrs) {
super(context, attrs);
setWidgetLayoutResource(R.layout.custom_preference);
}

@Override
protected void onBindView(View view) {
super.onBindView(view);

// Set our custom views inside the layout
final TextView myTextView = (TextView) view
.findViewById(R.id.mypreference_widget);

ok_button
= (Button) view.findViewById(R.id.ok);
ok_button.setOnClickListener(
new OnClickListener() {

@Override
public void onClick(View v) {
mClickCounter
+= 1;
notifyChanged();
// notify UI to refresh
SharedPreferences sp = getSharedPreferences();
Editor et
= sp.edit();
et.putInt(
"mypreference_widget", mClickCounter);
et.commit();
}
});
if (myTextView != null) {
SharedPreferences sp
= getSharedPreferences();
mClickCounter
= sp.getInt("mypreference_widget", 200);
myTextView.setText(String.valueOf(mClickCounter));
}
}

@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
return a.getInteger(index, 0);
}

@Override
protected void onClick() {
// TODO Auto-generated method stub
int nKeep = mClickCounter + 1;
callChangeListener(nKeep);
// add lock
mClickCounter = nKeep;
persistInt(mClickCounter);
notifyChanged();
// notify UI to refresh
super.onClick();
}

@Override
protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
if (restoreValue) {
// Restore state
mClickCounter = getPersistedInt(mClickCounter);
}
else {
// Set state
int value = (Integer) defaultValue;
mClickCounter
= value;
persistInt(value);
}

}


}

  

custom_preference.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id
="@+id/custompref" android:orientation="vertical"
android:layout_width
="wrap_content" android:layout_height="wrap_content">
<TextView android:id="@+id/mypreference_widget"
android:layout_width
="wrap_content" android:layout_height="wrap_content"
android:layout_gravity
="center_vertical" android:layout_marginRight="6sp"
android:text
="Hello Kitty" android:focusable="false"
android:clickable
="false" />
<LinearLayout android:orientation="horizontal"
android:layout_width
="wrap_content" android:layout_height="wrap_content">
<Button android:id="@+id/ok" android:text="OK"
android:layout_weight
="1.0" android:layout_width="wrap_content"
android:layout_height
="wrap_content" />
<Button android:id="@+id/cancel" android:text="cancel"
android:layout_weight
="1.0" android:layout_width="wrap_content"
android:layout_height
="wrap_content" />
</LinearLayout>
</LinearLayout>

  

setting.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference android:key="music"
android:title
="@string/music_title" android:summary="@string/music_summary"
android:defaultValue
="true" />
<CheckBoxPreference android:key="hints"
android:title
="@string/hints_title" android:summary="@string/hints_summary"
android:defaultValue
="true" />
<PreferenceScreen android:key="detailSetting"
android:title
="@string/detail_setting_title" android:summary="@string/detail_setting_summary">
<CheckBoxPreference android:key="music1"
android:title
="@string/music_title" android:summary="@string/music_summary"
android:defaultValue
="true" />
<CheckBoxPreference android:key="music2"
android:title
="@string/music_title" android:summary="@string/music_summary"
android:defaultValue
="true" />
</PreferenceScreen>
<PreferenceScreen android:key="customSetting"
android:title
="@string/custom_setting_title" android:summary="@string/custom_setting_summary">
<intent android:action="android.intent.action.MAIN"
android:targetPackage
="com.rasa.game" android:targetClass="com.rasa.game.CustomSetting" />
</PreferenceScreen>
<com.rasa.game.CustomPreference
android:key="my_preference" android:title="Advance Preference"
android:summary
="You can custom design your prefrence UI"
android:defaultValue
="100" />
</PreferenceScreen>

  

原文地址:https://www.cnblogs.com/myparamita/p/2174425.html