SearchView 笔记

作者: chauI | 来源:发表于2017-04-10 11:57 被阅读345次
  • 简单的使用
  • 修改样式
  • 获取焦点相关

使用

  • 布局文件:
<RelativeLayout
    android:id="@+id/search_edit_frame"
    style="@style/InfoLayoutStyle">

    <android.support.v7.widget.SearchView
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    
    <SearchView
        android:id="@+id/info_build_sv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:iconifiedByDefault="false"/>
</RelativeLayout>

要注意 android.widgetandroid.support.v7.widget 包里的用法是不太一样的。
特别是 android.support.v7.widget.SearchView 需要父布局 id 设为 search_edit_frame
否则会报错:

报错信息
  • 添加监听
// 设置搜索文本监听
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    // 当点击搜索按钮时触发该方法
    @Override
    public boolean onQueryTextSubmit(String query) {
        return false;
    }

    // 当搜索内容改变时触发该方法
    @Override
    public boolean onQueryTextChange(String newText) {
        if (!TextUtils.isEmpty(newText)){
            
        }else{
            
        }
        return false;
    }
});
  • 其他重要的方法
setIconifiedByDefault(boolean);//图标是否显示在搜索框内
setImeOptions(int);//输入法搜索选项字段,默认是搜索
setInputType(int);//输入类型
setMaxWidth(int);//最大宽度
setQueryHint(CharSequence);//提示字符串
  • 对应的 xml 属性
android:iconifiedByDefault  
android:imeOptions  
android:inputType   
android:maxWidth    
android:queryHint

改变样式

SearchView 里集合了若干个 View,我们可以先获取到指定 View 的 id
根据 id 获取 View 的实例,以此改变样式

SearchView 源码
  • 获取搜索图标的 id,用 id 获取实例来更换图片。


    替换搜索图标
int imgId = mSearchView.getContext().getResources()
        .getIdentifier("android:id/search_mag_icon",null,null);
ImageView imageView = (ImageView)mSearchView.findViewById(imgId);
if (imageView != null){
    imageView.setImageResource(R.drawable.ic_location);
}
  • 去掉输入框的下划线
int plateId = mSearchView.getContext().getResources()
        .getIdentifier("android:id/search_plate",null,null);
View plate = mSearchView.findViewById(plateId);
plate.setBackgroundResource(R.color.white);

至于其他的 View 的 id 获取的方式,只要点进源码查看就可以了:

SearchView 源码

更多

实际上 SearchView 里有一个 SearchAutoComplete 完成搜索提示 / 历史记录的功能:

具体见于 Android SearchView的高级用法,解决关于SearchView的样式与控制问题

获取焦点的相关问题

  • 取消默认自动获取焦点
    似乎有几种方法都可以做到,例如设置 SearchView 的父控件的属性
<LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="60dp"
            android:focusable="true"
            android:focusableInTouchMode="true">

       <SearchView
                android:layout_width="fill_parent"
                android:layout_height="40dp"
                android:inputType="textFilter"
                android:queryHint="输入IP"
                android:textColor="#ABABAB"
                android:textColorHint="#ABABAB" />

 </LinearLayout></span></span>

android:focusableandroid:focusableInTouchMode 设为 true
或者在 OnResume() 中设置:

mSearchView.setFocusable(true);
mSearchView.setFocusableInTouchMode(true);
//mSearchView.requestFocus();  //获取焦点
  • 关闭软键盘
//如果软键盘已经出现则关闭软键盘
View view = getActivity().getWindow().peekDecorView();
if (view != null) {
    InputMethodManager inputMethodManager = (InputMethodManager) getActivity()
            .getSystemService(Context.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

相关文章

  • SearchView 笔记

    简单的使用 修改样式 获取焦点相关 使用 布局文件: 要注意 android.widget 和 android.s...

  • 搜索框(searchView)使用

    目录 searchView searchView是搜索框.提供搜索框的图形界面. 使用方式: searchView...

  • android 控件 弹框+ 搜索框

    dialog+ SearchView + ListView 1.效果: 1.一个searchView+List...

  • SearchView的用法(一)

    前言 今天来讲讲searchView的使用,这里讲的searchView是引用android.support.v7...

  • swift 中 修改UISearchBar 的圆角

    searchView.setSearchFieldBackgroundImage(UIImage(named: "...

  • SearchView

    Android 搜索框:SearchView 的属性和用法详解MaterialDesign学习篇(五),使用Sea...

  • SearchView

    默认让SearchView不获取焦点 在SearchView的父控件中设置 如果弹出来的软键盘总是把布局文件挤上去...

  • SearchView

    @Override public boolean onCreateOptionsMenu(Menu menu) {...

  • SearchView实现搜索功能

    SearchView是安卓自带的搜索控件,可以帮助我们省下很多功夫。SearchView提供的api很多,但是麻烦...

  • SearchView使用

    SearchView这个控件是经常用到的,用法也比较简单。 最简单的SearchView代码如下: 如图: 为了方...

网友评论

    本文标题:SearchView 笔记

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