偏好屏幕中的android EditText

时间:2011-08-21 11:10:50

标签: android preferences

我可以在偏好设置屏幕中放置EditText元素吗?

我想这样做是为了允许通过输入快速搜索大型ListPreference,但不想保存搜索框的内容?这是可能的,还是偏好屏幕上不允许使用标准布局控件。

目标是提供一种选择时区并将其保存为首选项的方法。单独使用ListViewPrefernce是不够的,因为必须滚动大量的时区。因此,我想提供一个“hypersearch”类型的输入框,用户可以在其中输入时区或一部分来缩小列表框选择范围。

1 个答案:

答案 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中的所有内容。不过,我不是好消息的。