美文网首页酷炫的UI效果Android开发
在使用searchview和listview+toolbar实现

在使用searchview和listview+toolbar实现

作者: sun_goden | 来源:发表于2016-09-16 17:13 被阅读5415次

在使用searchview和listview+toolbar实现搜索关联
分为以下几步:
一,添加toolbar的布局如:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:background="#39cbec"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    >
    </android.support.v7.widget.Toolbar>
    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>
</LinearLayout>```
二, 然后  在menu文件中toolbar添加searchview菜单,默认为图标,可以实现点击展开

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<item
android:id="@+id/search"
android:title="dd"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView"
android:icon="@mipmap/abc_ic_search_api_mtrl_alpha"
/>
</menu>```
这里需要把showAsAction设置为collapseAction|ifRoom ddd
actionViewClass设置为系统或者v7库的searchview组件
这里设置为app,是因为android studio自动生成项目后,项目自动继承ActionBarActivity类,代码就会出现兼容问题
Ddd showAsAction 属性共五个值:
ifRoom 会显现item,但是如果有4个或以上会隐藏在溢出列表中 ,但是并不局限于4个,可以根据的宽窄never永远不会显示
Always 无论是否溢出,总会显示
Never 从不显示
withText示意actionbar 要显示文本标题,actionbar会尽可能显示标题,但是如果空间有限,文本标题可能显示不全
CollapseActionView 声明这个操作视窗应该被折叠一个按钮中,当用户选择这个按钮时,这个操作视窗展开,否则,这个操作视窗在默认的情况下是可见的,并且即使在用于不适用的时候,也要占据有效空间
一般要配合ifRoom使用
三,在xml中注册,隐藏Actionbar 设置如下

android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
         <action android:name="android.intent.action.SEARCH"/>
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <meta-data  android:name="android.app.searchable"
        android:resource="@xml/searchable" />```
新建一个searchable.xml  ,主要设置android:label,在这里需要注意xml和searchable的label需要设置为同一个值 ,为这个花了好长时间

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="search"
android:label="@string/app_name">
</searchable>```

四,在主Mainactivity中加载菜单

    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu,menu);
        MenuItem menuItem=menu.findItem(R.id.search);//
           searchView= (SearchView) MenuItemCompat.getActionView(menuItem);//加载searchview
                searchView.setOnQueryTextListener(this);//为搜索框设置监听事件
        searchView.setSubmitButtonEnabled(true);//设置是否显示搜索按钮
       searchView.setQueryHint("查找");//设置提示信息
        searchView.setIconifiedByDefault(true);//设置搜索默认为图标
        return  true; }```

五,加载toolbar,绑定listview 

listView= (ListView) findViewById(R.id.listview);
Toolbar toolbar=(Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,data);
listView.setAdapter(adapter);
listView.setTextFilterEnabled(true);//设置为可过滤的

六,监听事件实现searchview和listview搜索

public boolean onQueryTextChange(String newText) {
Toast.makeText(this,"154",Toast.LENGTH_SHORT).show();
if (TextUtils.isEmpty((newText))){
listView.clearTextFilter();
}else{
listView.setFilterText(newText);}
return true;}```
好,最终终于实现toolbar上实现searchview的搜索,绑定listview

Paste_Image.png Paste_Image.png

相关文章

网友评论

  • 5d89ee9858c7:不错,就是那个弹出来的PopuWindow好丑,要怎么让它不显示呢?求指教,谢谢!

本文标题:在使用searchview和listview+toolbar实现

本文链接:https://www.haomeiwen.com/subject/cmriettx.html