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

本文实例为大家分享了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"

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android自定义控件实现UC浏览器语音搜索效果

    最近项目上要实现语音搜索功能,界面样式要模仿一下UC浏览器的样式,UC浏览器中有一个控件,会随着声音大小浮动,然后寻思偷个懒,百度一下,结果也没有找到类似的,只能自己动手了. 先上图看我实现的效果: 这是自定义控件的代码,里面注释也很明白,就不费话了 public class CustomCircleView extends View{ private Paint mPaint; private int strokeWidth = 0; //圆环的宽度 private Bitmap bitmap

  • Android仿简书动态searchview搜索栏效果

    简书的动态搜索栏效果是这样的,挺高大上的感觉. ezgif.com-resize.gif 仔细想一下,其实实现起来非常简单,这是我做的效果,基本完美还原. ezgif.com-resize (2).gif 实现这个效果, 只要关注几个点 1.搜索栏伸展和收缩动画效果实现 2.搜索栏伸展和收缩的时机 3.顶部透明度的渐变 搜索栏伸展和收缩动画效果实现: 我们只要明确,使用系统为我们提供的Transition框架,就可以轻而易举的实现了. 首先要引入依赖compile 'com.android.su

  • 可支持快速搜索筛选的Android自定义选择控件

    Android 自定义支持快速搜索筛选的选择控件使用方法,具体如下 项目中遇到选择控件选项过多,需要快速查找匹配的情况. 做了简单的Demo,效果图如下: 源码地址:https://github.com/whieenz/SearchSelect 这个控件是由Dialog+SearchView+ListView实现的.Dialog用来承载选择控件,SearchView实现输入,ListView展示结果.设计概要图如下: 一.自定义Dialog Dialog布局文件 <?xml version=&quo

  • Android搜索框(SearchView)的功能和用法详解

    SearchView是搜索框组件,它可以让用户在文本框里输入文字,通过监听器取得用户的输入,当用户点击搜索时,监听器执行实际的搜索. 1.SearchView组件的常用方法如下: ①setIconifiedByDefault(boolean iconified) ===> 设置搜索框默认是否自动缩小为图标. ②setOnQueryTextListener(SearchView,OnQueryTextListener listener) ===> 为搜索框设置监听器 ③setSubmitButt

  • Android自定义View实现搜索框(SearchView)功能

    概述 在Android开发中,当系统数据项比较多时,常常会在app添加搜索功能,方便用户能快速获得需要的数据.搜索栏对于我们并不陌生,在许多app都能见到它,比如豌豆荚 在某些情况下,我们希望我们的自动补全信息可以不只是纯文本,还可以像豌豆荚这样,能显示相应的图片和其他数据信息,因此Android给我们提供的AutoCompleteTextView往往就不够用,在大多情况下我们都需要自己去实现搜索框. 分析 根据上面这张图,简单分析一下自定义搜索框的结构与功能,有 1. 搜索界面大致由三部门组成

  • Android SearchView搜索框组件的使用方法

    SearchView是搜索框组件,它可以让用户在文本框里输入文字,通过监听器取得用户的输入,当用户点击搜索时,监听器执行实际的搜索. 本文就为大家分享了SearchView搜索框组件的使用方法,供大家参考,具体内容如下 效果: 代码SearchActivity.java package com.jialianjia.bzw.activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.

  • 解决Android SearchView不显示搜索icon的问题

    背景: 之前碰到了一个页面展示问题,SearchView放在Toolbar里面,展示在页面顶部,发现进入这个页面后,左上角是箭头图标(表示点击返回),中间区域就是搜索栏,不过看到会显示搜索icon

  • Android开发之搜索框SearchView用法示例

    本文实例讲述了Android开发之搜索框SearchView用法.分享给大家供大家参考,具体如下: 介绍: SearchView时搜索组件,可以让用户输入文字,见他输入匹配结果 效果: 基本的用法 我就不详细描述了 这里主要说一些我遇到的问题: 如下: 一.点击listView后 让文字自动补全到searchView上: 首先需要设置adapter 然后这只listView的点击事件: private final String[] mStrings = {"我爱Java","

  • Android搜索框SearchView属性和用法详解

    SearchView简介 SearchView是Android原生的搜索框控件,它提供了一个用户界面,用于用户搜索查询. SearchView默认是展示一个search的icon,点击icon展开搜索框,如果你想让搜索框默认就展开,可以通过setIconifiedByDefault(false);实现. SearchView属性 SearchView使用 xml中定义SearchView: <?xml version="1.0" encoding="utf-8"

  • Android搜索框组件SearchView的基本使用方法

    SearchView是android系统中内置的一个搜索框组件,可以很方便在添加在用户界面之上,但是也带来了一些问题,那就是searchview的UI是固定的,定制起来会很麻烦,如果对SearchView的要求比较高,完全可以采用button和EditText自己实现.这里先简单的说说SearchView的使用: main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" x

随机推荐