我可以在偏好设置屏幕中放置EditText元素吗?
我想这样做是为了允许通过输入快速搜索大型ListPreference,但不想保存搜索框的内容?这是可能的,还是偏好屏幕上不允许使用标准布局控件。
目标是提供一种选择时区并将其保存为首选项的方法。单独使用ListViewPrefernce是不够的,因为必须滚动大量的时区。因此,我想提供一个“hypersearch”类型的输入框,用户可以在其中输入时区或一部分来缩小列表框选择范围。
答案 0 :(得分:1)
你可以做的只是制作一个标准的偏好,它会显示一个包含EditText的对话框,并添加一个ontextchangelistener:
searchET.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
就显示搜索结果而言,我不知道。我之前从未尝试过任何此类功能,但它似乎对您有用,并且您必须弄清楚执行搜索本身所需的任何代码,但这会添加初始功能。
修改强> 按标准偏好,我的意思是在XML中:
<Preference
android:title="Time Zone"
android:summary="Choose your time zone"
android:key="timeZone"/>
在PreferenceActivity中添加以下内容:
Preference timeZone = (Preference)findPreference("timeZone");
timeZone.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference arg0) {
showDialog(1);
return false;
}
});
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case 1:
final EditText searchET = new EditText(this);
//do the searchET.addTextChangedListener here
return new AlertDialog.Builder(this)
.setTitle("Choose Time Zone")
.setView(showAppString)
.setPositiveButton(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
//save the time zone to sharedPreferences
SharedPreferences pref = PreferenceManager.getDefaultSharedPreference(this);
SharedPreferences.Editor editor = pref.edit();
editor.putString("TIME_ZONE", TZ.toString());
}//closes the onClick
})//closes the onclicklistener
.show();
}//closes the switch
}//closes the oncreatedialog
尽管如此,我认为您实际上只能使用EditTextPreference,然后将EditTextChangedListner添加到EditTextPreference,因为我认为它继承了EditTexts中的所有内容。不过,我不是好消息的。