SearchView和RecyclerView实现搜索界面,2018/1/1 04
2018-01-01 00:15
281 查看
2018年第一篇博客,新的一年新的开始,今年要坚持写下去。
Android Developers 中SerarchView网址
首先xml布局
其中iconifiedByDefault:控制进入页面时是否直接为搜索状态
4000
true为显示搜索提示图片(searchIcon)点击之后进入搜索状态,之后搜索图片显示为searchHintIcon,提示文字为defaultQueryHint,搜索状态的背景为queryBackground。
false则直接为搜索状态。
代码实现:
一,SearchView 初始设置
二,RecyclerView初始设置
其中涉及到了FlexFoxLayout这是google推出的一个能够动态显示textView的布局,因为直接使用感觉太过麻烦需要建好多textView,我就改为使用RecyclerView加FlexboxLayoutManager 来实现同样的效果。
FlexFoxLayout Github链接
Android Developers 中SerarchView网址
首先xml布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.searchdemo.MainActivity"> <RelativeLayout android:layout_marginTop="24px" android:layout_marginBottom="24px" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_marginRight="44px" android:layout_marginLeft="33px" android:id="@+id/search_cancel_text_view" android:layout_centerVertical="true" android:layout_alignParentRight="true" android:text="取消" android:textSize="44px" android:textColor="@color/yi_666666" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <android.support.v7.widget.SearchView android:id="@+id/search_search_view" android:layout_toLeftOf="@id/search_cancel_text_view" android:layout_marginLeft="44px" app:iconifiedByDefault="true" app:searchHintIcon="@mipmap/cm_search" app:searchIcon="@mipmap/cm_search" app:defaultQueryHint="输入姓名搜索" app:queryBackground="@drawable/shape_round_rectangle_f5f5f5_2" android:background="@drawable/shape_round_rectangle_f5f5f5_2" android:layout_width="match_parent" android:layout_height="78px"/> </RelativeLayout> <View android:background="@color/yi_dbdbdb" android:layout_width="match_parent" android:layout_height="2px"/> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_marginLeft="44px" android:layout_marginTop="44px" android:textSize="40px" android:textColor="@color/yi_666666" android:text="最近搜索" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/search_clear_text_view" android:layout_alignParentRight="true" android:layout_marginRight="44px" android:layout_marginTop="44px" android:textSize="40px" android:textColor="@color/yi_666666" android:text="清空" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </RelativeLayout> <android.support.v7.widget.RecyclerView android:layout_marginTop="33px" android:id="@+id/search_recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.RecyclerView> </LinearLayout>
其中iconifiedByDefault:控制进入页面时是否直接为搜索状态
4000
true为显示搜索提示图片(searchIcon)点击之后进入搜索状态,之后搜索图片显示为searchHintIcon,提示文字为defaultQueryHint,搜索状态的背景为queryBackground。
false则直接为搜索状态。
代码实现:
一,SearchView 初始设置
//找到SearchView中的textview ,从而修改输入的文字颜色字体大小等 LinearLayout linearLayout1 = (LinearLayout) mSearchView.getChildAt(0); LinearLayout linearLayout2 = (LinearLayout) linearLayout1.getChildAt(2); LinearLayout linearLayout3 = (LinearLayout) linearLayout2.getChildAt(1); mAutoCompleteTextView = (AutoCompleteTextView) linearLayout3.getChildAt(0); mAutoCompleteTextView.setTextSize(13); mAutoCompleteTextView.setTextColor(getResources().getColor(R.color.colorAccent)); mSearchCancelTextView.setOnClickListener(this); mSearchClearTextView.setOnClickListener(this); mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { //当点击输入键盘上的确定 按钮时的回调返回输入的搜索的数据 //这里是通过sp保存数据,并且是把所有搜索的数据转成json之后报错 mSearchNames.add(query); SharedPreferencesHelper.getEditor().putString("search_names", JsonUtil.ListToJsonString(mSearchNames)).commit(); return false; } @Override public boolean onQueryTextChange(String newText) { mQueryText=newText; //为空则为取消状态,点击取消可以返回上一页 //当有数据时则为搜索状态,点击搜索 if(mQueryText.equals("")){ mState=0; mSearchCancelTextView.setText("取消"); }else{ mState=1; mSearchCancelTextView.setText("搜索"); } return true; } });
二,RecyclerView初始设置
其中涉及到了FlexFoxLayout这是google推出的一个能够动态显示textView的布局,因为直接使用感觉太过麻烦需要建好多textView,我就改为使用RecyclerView加FlexboxLayoutManager 来实现同样的效果。
FlexFoxLayout Github链接
//从sp中取出之前搜索过的内容 String searchNames = SharedPreferencesHelper.getSharedPreferences().getString("search_names", ""); //装成list集合 mSearchNames = JsonUtil.JsonToListString(searchNames); FlexboxLayoutManager flexboxLayoutManager = new FlexboxLayoutManager(this); mRecyclerView.setLayoutManager(flexboxLayoutManager); mSearchAdapter = new MySearchAdapter(); mRecyclerView.setAdapter(mSearchAdapter);
private class MySearchAdapter extends RecyclerView.Adapter<SearchViewHolder> { @Override public SearchViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { TextView textView=new TextView(MainActivity.this); textView.setTextColor(getResources().getColor(R.color.colorPrimary)); textView.setTextSize(16); //必须是FlexboxLayoutManager下的LayoutParams FlexboxLayoutManager.LayoutParams layoutParams= new FlexboxLayoutManager.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParams.setMargins(44,30,44,30); textView.setLayoutParams(layoutParams); return new SearchViewHolder(textView); } @Override public void onBindViewHolder(SearchViewHolder holder, int position) { holder.bindViewHolder(); } @Override public int getItemCount() { return mSearchNames.size(); } } private class SearchViewHolder extends RecyclerView.ViewHolder { private SearchViewHolder(View itemView) { super(itemView); } private void bindViewHolder(){ if(itemView instanceof TextView) { //如果itemView是TextView 进行初始化搜索过的数据 ((TextView) itemView).setText(mSearchNames.get(mSearchNames.size()-getAdapterPosition()-1)); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //处理点击搜索 } }); } } }
相关文章推荐
- Android客户端之“微服私访”App的系统学习(七)XRecyclerView快速实现列表界面+自定义Search输入框,软键盘搜索按钮监听+TextView部分样式改变
- 使用RecyclerView实现聊天界面
- Android 使用RecyclerView实现(仿微信)的联系人A-Z字母排序和过滤搜索功能
- 利用RecyclerView的嵌套实现仿京东筛选框(文字搜索功能)
- RecyclerView实现聊天界面功不能滑动到指定位置问题
- android模拟聊天界面recyclerview实现
- Android中RecyclerView布局代替GridView实现类似支付宝的界面
- ListView、RecyclerView 两种方式实现聊天界面支持文字、表情、图片和语音信息,支持下拉加载更多
- 基于RecyclerView实现的仿微信聊天界面,item长按根据触摸位置弹出对话框
- Android基于RecyclerView实现高亮搜索列表
- 简化 RecyclerView 的多种 type 的 adapter,Fragment 可以动态添加到 RecyclerView 上,实现复杂的界面分多个模块开发
- Android基于RecyclerView实现高亮搜索列表
- SearchView+RecyclerView+GreenDao的搜索功能实现(1)
- Recyclerview的一些个人理解与使用(二)实现一个简单的列表界面
- Android中RecyclerView布局代替GridView实现类似支付宝的界面
- SearchView+RecyclerView+GreenDao的搜索功能实现(2)
- Android ListView、RecyclerView两种方式实现聊天界面搭建
- SearchView+RecyclerView+GreenDao的搜索功能实现(2)
- 解决RecyclerView实现聊天界面,但点击下面的EditText后弹出的输入法会遮盖RecyclerView内容的方法
- 基于RecyclerView实现的实现多样化的item样式——类似IM即时通讯聊天界面的布局效果