去除 ListView 在 setFilterText 设置过滤之后出现黑色弹框
2017-05-23 16:01
204 查看
在使用 ListView 实现好友通讯录时,遇到问题:当给 ListView 的适配器 BaseAdapter 实现 Filterable 接口之后,调用: mList.setFilterText(s.toString()); 方法之后,ListView会自动出现一个显示当前过滤文字的黑色悬浮框,如图: ListView 没有暴露相关方法去除弹框,寻找发现 ListView 父类 AbsListView中的相关控件:
/** * Used with type filter window */ EditText mTextFilter;
相关代码 AbsListView.java:
/*** Sets the initial value for the text filter.* @param filterText The text to use for the filter.** @see #setTextFilterEnabled*/public void setFilterText(String filterText) {// TODO: Should we check for acceptFilter()?if (mTextFilterEnabled && !TextUtils.isEmpty(filterText)) {createTextFilter(false);// This is going to call our listener onTextChanged, but we might not// be ready to bring up a window yetmTextFilter.setText(filterText);mTextFilter.setSelection(filterText.length());if (mAdapter instanceof Filterable) {// if mPopup is non-null, then onTextChanged will do the filteringif (mPopup == null) {Filter f = ((Filterable) mAdapter).getFilter();f.filter(filterText);}// Set filtered to true so we will display the filter window when our main// window is readymFiltered = true;mDataSetObserver.clearSavedState();}}}
相关代码 typing_filter.xml
<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2006 The Android Open Source ProjectLicensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.--><EditText xmlns:android="http://schemas.android.com/apk/res/android"android:textSize="36dp"android:textColor="#99FFFFFF"android:background="#BB000000"android:minWidth="240dip"android:maxWidth="240dip"android:padding="10dip"android:gravity="center_horizontal"android:focusable="false"/>解决方法,通过反射设置 mTextFilter 属性达到隐藏弹框(或修改弹窗样式效果):
private void changeSearch(ListView listView) {try {Field field = listView.getClass().getSuperclass().getDeclaredField("mTextFilter");field.setAccessible(true);EditText searchAutoComplete = (EditText) field.get(listView);// searchAutoComplete.setTextColor(getResources().getColor(android.R.color.transparent));//// searchAutoComplete.setBackgroundColor(getResources().getColor(android.R.color.transparent));searchAutoComplete.setVisibility(View.GONE);} catch (Exception e) {e.printStackTrace();}}
设置之后,黑色弹框成功隐藏:
相关文章推荐
- 关闭Listview的setFilterText() 出现的弹出对话框
- 安卓getListView().setTextFilterEnabled(true)
- 解决listview中的textview设置了setMovementMethod导致onItemclick无效的问题
- SearchView setFilterText 关闭Toast 解决 SearchView 输入搜索词时出现悬浮窗
- android AbsListView.setTextFilterEnabled(true)
- 解决listview设置背景图片以后,拖动出现黑色的问题。
- [置顶] 当SearchView搜索的listView使用自定义适配器时,自定义setFilterText()方法(模糊查询筛选)
- 去除ListView默认出现黑色背景的方法
- 获取listview中的子元素view, 设置textview的图标:setCompoundDrawables使用, view.textView.getHeight()为0
- ListView 在getView()中设置一个item中的TextView的动态显示出现其它的也显示的bug解决方法
- 解决listview设置背景图片以后,拖动出现黑色的问题。
- 使用EditText对ListView进行过滤,并作拼音匹配
- [Android开发] 代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常(常见于listview中)
- ListView 滑动的时候 变系统默认黑色,或是设置不变色
- ListView 滑动的时候 变系统默认黑色,或是设置不变色
- ListView最后一行之后没有出现分割线?
- 利用Paint的 setColorFilter 颜色过滤 来实现按钮被按下的效果
- 解决ListView 下拉时出现黑色阴影
- textview中有很多行,我只让它显示三行,最后显示...,我设置了android:maxLines="3"和android:ellipsize="end",但出现的问题是只显示两行就显示“...”
- TextView点击之后出现文字颜色更换效果,之后又马上变回原来