Android SearchView搜索控件使用方法详解

Naomi ·
更新时间:2024-09-20
· 1492 次阅读

本文实例为大家分享了Android SearchView搜索控件的具体实现代码,供大家参考,具体内容如下

方法介绍

setQueryHint

设置 Hint 的文字内容

setMaxWidth

设置搜索框的最大宽度

setSubmitButtonEnabled

是否显示提交按钮,默认是false

setIconified

搜索框是否展开,false表示展开

setIconifiedByDefault

是否锁定搜索框为展开状态,false表示锁定(放大镜在搜索框外)

onActionViewExpanded

锁定搜索框为展开状态

onActionViewCollapsed

将当前状态切换为收缩状态

setImeOptions

改变软键盘的右下角的回车键值
EditorInfo.IME_ACTION_SEARCH
表示右下角为搜索

使用方法 <?xml version="1.0" encoding="utf-8"?> <LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">    <ListView       android:layout_height="match_parent"       android:layout_width="match_parent"       android:id="@+id/mainListView1"/> </LinearLayout>

java代码

public class MainActivity extends AppCompatActivity  {    private ListView mListView;    private ArrayAdapter mArrayAdapter;    private String[]data={"a同学","b同学","c同学","d同学","A宿舍","B学校","C食堂","D教室","AA制"};    private SearchView mSearchView;    @Override    protected void onCreate(Bundle savedInstanceState) {       super.onCreate(savedInstanceState);       setContentView(R.layout.activity_main);       mArrayAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,data);       mListView=findViewById(R.id.mainListView1);       mListView.setAdapter(mArrayAdapter);    }    @Override    public boolean onCreateOptionsMenu(Menu menu)    {       getMenuInflater().inflate(R.menu.menu,menu);       MenuItem MenuItem=menu.findItem(R.id.action_search);       mSearchView=(SearchView) MenuItemCompat.getActionView(MenuItem);       mSearchView.setQueryHint("请输入关键词");       mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){             @Override             public boolean onQueryTextSubmit(String p1)             {                //点击搜索按钮事件                //收起键盘                mSearchView.clearFocus();                //收起搜索框                mSearchView.onActionViewCollapsed();                return false;             }             @Override             public boolean onQueryTextChange(String p1)             {                //当搜索框的文字内容发生变化时调用                mArrayAdapter.getFilter().filter(p1);                return false;             }          });       return super.onCreateOptionsMenu(menu);    } } <?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">    <item       android:id="@+id/action_search"       app:actionViewClass="android.support.v7.widget.SearchView"       app:showAsAction="ifRoom" />    <item       android:id="@+id/action_settings"       app:showAsAction="never"/> </menu>

效果图

总结了几个比较常见的问题,并在网上找到了相应的解决方案,亲测有效

问题1:如何去掉下划线或自定义背景

try {     //--拿到字节码             Class<?> argClass = mSearchView.getClass();       //--指定某个私有属性,mSearchPlate是搜索框父布局的名字               Field ownField = argClass.getDeclaredField("mSearchPlate");       //--暴力反射,只有暴力反射才能拿到私有属性              ownField.setAccessible(true);       View mView = (View) ownField.get(mSearchView);       //--设置背景        mView.setBackgroundColor(Color.TRANSPARENT);     } catch (Exception e) {       e.printStackTrace(); }

问题2:自定义文字与光标的颜色

int searchPlateId = mSearchView.getContext().getResources()    .getIdentifier("android:id/search_plate", null, null); View searchPlate = mSearchView.findViewById(searchPlateId); if (searchPlate != null) {    int searchTextId = searchPlate.getContext().getResources()    .getIdentifier("android:id/search_src_text", null, null);    //自定义文本颜色    TextView searchText = (TextView) searchPlate.findViewById(searchTextId);    if (searchText != null)    {       searchText.setTextColor(Color.WHITE);       searchText.setHintTextColor(Color.WHITE);    } try {    //自定义光标颜色    Field mCursorDrawableRes=TextView.class.getDeclaredField("mCursorDrawableRes");     mCursorDrawableRes.setAccessible(true);     mCursorDrawableRes.set(searchText, R.drawable.cursor_color);  } catch (Exception e){} } <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android">     <solid         android:color="#FFFF0000"/>     <size         android:width="1dp"/> </shape>

问题3:改变图标渲染颜色为白色

首先用Toolbar代替ActionBar

然后为Toolbar添加属性

app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"



方法 Android

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章