自定义ListPreference

主要实现在ListPreference弹出的对话框中的某一项选中时,再弹出一个编辑框,具体代码如下:

/**
* @author wu xiang
* @date Dec 26, 2011
* @fileName TestPre.java
*
*/
public class MyListPreference extends ListPreference implements OnPreferenceClickListener {

private Toast myToast;
/**
* @param context
* @param attrs
*/
public MyListPreference(Context context, AttributeSet attrs) {
super(context, attrs);
myToast=Toast.makeText(context, "", Toast.LENGTH_SHORT);
}

public boolean onPreferenceClick(Preference preference) {
// TODO Auto-generated method stub
return false;
}
@Override
protected void onPrepareDialogBuilder(Builder builder) {
int checkItem=getValueIndex(getValue());
builder.setSingleChoiceItems(R.array.pref_search_limit_choices, checkItem, new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {
if(3==which){
final EditText et=new EditText(MyListPreference.this.getContext());
et.setText(getValue());
new AlertDialog.Builder(MyListPreference.this.getContext())
.setTitle(R.string.setting_title)
.setView(et)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {
String sValue=et.getText().toString();
if(Pattern.compile("\\d+").matcher(sValue).matches()){
int iValue=Integer.parseInt(sValue);
if(iValue>0&&iValue<50){
setValue(iValue+"");
}
}else{
myToast.setText(R.string.pref_prompt);
myToast.show();
}
}
})
.setNeutralButton(android.R.string.cancel, null)
.create().show();
}else{
setValue(getEntryValues()[which]+"");
}
dialog.dismiss();
}
});
builder.setPositiveButton(null, null);
}

@Override
protected void onDialogClosed(boolean positiveResult) {

}

private int getValueIndex(String value){
int len=getEntryValues().length;
for(int i=0;i<len;i++){
if(value.equals(getEntryValues()[i])){
return i;
}
}
return 3;//选中“自定义” 一项
}
}


效果如图所示
[img]http://dl.iteye.com/upload/attachment/611782/ce3180a3-b083-3950-a5b8-e0104bb3e983.png[/img]
[img]http://dl.iteye.com/upload/attachment/611784/c9a1fc23-c019-3220-abb5-9b2c0075e83f.png[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ListPreference 是 Android 中的一个 UI 元素,用于在设置中显示一个可选项列表,并允许用户选择其中一个选项。默认情况下,ListPreference 显示一个预定义的选项列表,但是我们可以通过扩展它来自定义选项列表。 首先,我们需要创建一个类来扩展 ListPreference,然后覆盖 `onPrepareDialogBuilder()` 方法,在该方法中设置我们自定义的选项列表。下面是一个简单的自定义 ListPreference 的示例代码: ```java public class CustomListPreference extends ListPreference { private Context mContext; private CharSequence[] mEntries; private CharSequence[] mEntryValues; public CustomListPreference(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; } @Override protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { super.onPrepareDialogBuilder(builder); // 设置自定义的选项列表 builder.setAdapter(new CustomListAdapter(mContext, mEntries, mEntryValues), null); } public void setEntries(CharSequence[] entries) { mEntries = entries; } public void setEntryValues(CharSequence[] entryValues) { mEntryValues = entryValues; } private class CustomListAdapter extends ArrayAdapter<CharSequence> { public CustomListAdapter(Context context, CharSequence[] entries, CharSequence[] entryValues) { super(context, R.layout.custom_list_preference_item, R.id.title, entries); } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); // 在这里设置选项的样式,比如字体大小、颜色等 TextView titleView = view.findViewById(R.id.title); titleView.setTextSize(18); return view; } } } ``` 在上面的代码中,我们创建了一个名为 CustomListPreference 的类来扩展 ListPreference。在 `onPrepareDialogBuilder()` 方法中,我们使用 `setAdapter()` 方法将自定义的选项列表设置为 AlertDialog 的 Adapter。在 CustomListAdapter 中,我们可以设置选项的样式,比如字体大小、颜色等。注意,在自定义列表项布局文件 custom_list_preference_item.xml 中,我们需要至少包含一个名为 title 的 TextView,以便在 CustomListAdapter 中使用。 最后,我们可以在 XML 文件中使用 CustomListPreference,如下所示: ```xml <com.example.CustomListPreference android:key="list_preference" android:title="List Preference" android:entries="@array/list_preference_entries" android:entryValues="@array/list_preference_entry_values"/> ``` 在上面的 XML 中,我们使用 CustomListPreference 替换了默认的 ListPreference,并使用 `setEntries()` 和 `setEntryValues()` 方法设置我们自定义的选项列表。注意,我们需要在 `res/values/arrays.xml` 文件中定义 `list_preference_entries` 和 `list_preference_entry_values` 数组。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值