灵活运用SearchView搜索框控件(二)

来源:互联网 发布:ubuntu u盘版本 编辑:程序博客网 时间:2024/05/29 19:45

实现自动完成。上代码。布局文件,在ToolBar下面加一个ListView。

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.devin.searchviewdemo.MainActivity">    <android.support.v7.widget.Toolbar        android:id="@+id/toolbar_top"        android:layout_width="match_parent"        android:background="#d36302"        android:layout_height="?actionBarSize">    </android.support.v7.widget.Toolbar>    <ListView        android:id="@+id/list_container"        android:layout_width="match_parent"        android:layout_below="@+id/toolbar_top"        android:layout_height="match_parent"/></RelativeLayout>

Activity代码中,设置ListView 的setTextFilterEnabled属性为true,在onQueryTextChange方法中设置setFilterText过滤器。

public class MainActivity extends AppCompatActivity implements        SearchView.OnQueryTextListener {    private static final String TAG = "SearchView";    private SearchView searchView;    private Toolbar mToolBar;    private ListView mListView;    private ArrayAdapter<String> adapter;    private Menu menu;    private String[] citys={"hanzhong","hangzhou","hankou","tianjin","tianshui","nanjing","nanning"};    private List<String> dataList;    //SearchView中的编辑框,这个编辑框是个android.support.v7.widget.SearchView$SearchAutoComplete    private SearchView.SearchAutoComplete searchText;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    /**     * 初始化     */    private void initView() {        mToolBar = (Toolbar) findViewById(R.id.toolbar_top);        setSupportActionBar(mToolBar);        mListView = (ListView) findViewById(R.id.list_container);        dataList=new ArrayList<>();        getData();    }    private void getData() {        for(String str:citys) {            dataList.add(str);        }        adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,citys);        mListView.setAdapter(adapter);        mListView.setTextFilterEnabled(true);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.main_option_menu, menu);        //取到menu对象,一边在其他地方调用        this.menu = menu;        MenuItem item = menu.findItem(R.id.main_menu_item_search);//获得菜单对象        searchView = new SearchView(this);//添加搜索控件        item.setActionView(searchView);//将SearchView控件添加到该菜单项中        //searchView.setIconified(false);//设置默认展开        //searchView.setQueryHint("搜索关键字");//设置搜索关键字提示        searchView.setOnQueryTextListener(this);//设置搜索监听        //因为我们添加了一个自定义的提交按钮,所以将默认的按钮设为无效        //searchView.setSubmitButtonEnabled(true);//设置提交按钮是否有效        //搜索栏关闭事件        searchView.setOnCloseListener(new SearchView.OnCloseListener() {            @Override            public boolean onClose() {                Log.i(TAG, "关闭");                return false;            }        });        //获取搜索框文本控件        searchText = (SearchView.SearchAutoComplete) searchView.findViewById(R.id.search_src_text);        return true;    }    /**     * 点击提交     *     * @param query     * @return     */    @Override    public boolean onQueryTextSubmit(String query) {        //有了自定义提交按钮就不用这里了        Log.i(TAG, "submit:" + query);        return false;    }    /**     * 文本变化     *     * @param newText     * @return     */    @Override    public boolean onQueryTextChange(String newText) {        MenuItem btnItem = menu.findItem(R.id.main_menu_item_btn_search);        //监控文本变化,如果为空就隐藏自定义的按钮,否则就显示        if (newText.isEmpty()) {            btnItem.setVisible(false);            //清除过滤器            mListView.clearTextFilter();        } else {            btnItem.setVisible(true);        }        //设置过滤器文本        mListView.setFilterText(newText);        return true;    }    /**     * 菜单项选择监听     *     * @param item     * @return     */    @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()) {            case R.id.main_menu_item_btn_search:                //自定义的搜索提交按钮                Toast.makeText(MainActivity.this, searchText.getText().toString(), Toast.LENGTH_SHORT).show();                break;            default:                break;        }        return true;    }}

设想:如果过滤过程中能够使关键文本高亮显示就好了。初步想法自定义一个item布局,放两个textView,根据搜索关键字将符合条件的列表项字符串拆分显示。

0 0
原创粉丝点击