在 SearchView 中键入时带有文本的奇怪灰色弹出窗口
Weird gray popup with text when typing in SearchView
我的应用程序中有一个 SearchView,当我在其中输入内容时,每个字符都会出现在一个奇怪的弹出窗口中,如下所示。
布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:focusable="true"
android:focusableInTouchMode="true"
android:background="@color/white"
tools:context="com.example.myapp">
<SearchView
android:id="@+id/search_view"
android:queryHint="@string/select_story_query_hint"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:divider="@color/gray"
android:dividerHeight="1dp"/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/create_new_story_button"
android:id="@+id/createStoryButton"
android:layout_gravity="center_horizontal"
android:layout_margin="10dp"
android:layout_marginBottom="5dp"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:background="@drawable/low_priority_button_background"
android:textColor="@color/black" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/done"
android:id="@+id/select_story_done"
android:layout_gravity="center_horizontal"
android:layout_margin="10dp"
android:layout_marginTop="5dp"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:background="@drawable/button_background"
android:textColor="@color/white" />
</LinearLayout>
代码:
mSearchView = (SearchView) view.findViewById(R.id.search_view);
mSearchView.setIconifiedByDefault(false);
mSearchView.setOnQueryTextListener(this);
mSearchView.setSubmitButtonEnabled(false);
mSearchView.setQueryHint(getString(R.string.query_hint));
听众:
@Override
public boolean onQueryTextChange(String newText) {
if (TextUtils.isEmpty(newText)) {
mListView.clearTextFilter();
} else {
mListView.setFilterText(newText);
}
return true;
}
我搜索时似乎找不到任何有关此问题的信息(我猜我没有使用正确的关键字)。这也发生在多个设备上 运行 不同版本的 Android(N5 5.1,O+O 4.4)并且只有这个特定字段有这个问题,所有其他 EditText 字段都没有问题。
这与 ListView
的过滤器功能的内置功能有关。正如 JonasCz 指出的那样,可以找到如何解决这个问题 here。我的代码更改为 onQueryTextChange()
方法来解决此问题(基本上使用 Adapter
的过滤器功能):
@Override
public boolean onQueryTextChange(String newText) {
Filter filter = adapter.getFilter();
if (TextUtils.isEmpty(newText)) {
filter.filter("");
} else {
filter.filter(newText);
}
return true;
}
我的应用程序中有一个 SearchView,当我在其中输入内容时,每个字符都会出现在一个奇怪的弹出窗口中,如下所示。
布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:focusable="true"
android:focusableInTouchMode="true"
android:background="@color/white"
tools:context="com.example.myapp">
<SearchView
android:id="@+id/search_view"
android:queryHint="@string/select_story_query_hint"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:divider="@color/gray"
android:dividerHeight="1dp"/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/create_new_story_button"
android:id="@+id/createStoryButton"
android:layout_gravity="center_horizontal"
android:layout_margin="10dp"
android:layout_marginBottom="5dp"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:background="@drawable/low_priority_button_background"
android:textColor="@color/black" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/done"
android:id="@+id/select_story_done"
android:layout_gravity="center_horizontal"
android:layout_margin="10dp"
android:layout_marginTop="5dp"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:background="@drawable/button_background"
android:textColor="@color/white" />
</LinearLayout>
代码:
mSearchView = (SearchView) view.findViewById(R.id.search_view);
mSearchView.setIconifiedByDefault(false);
mSearchView.setOnQueryTextListener(this);
mSearchView.setSubmitButtonEnabled(false);
mSearchView.setQueryHint(getString(R.string.query_hint));
听众:
@Override
public boolean onQueryTextChange(String newText) {
if (TextUtils.isEmpty(newText)) {
mListView.clearTextFilter();
} else {
mListView.setFilterText(newText);
}
return true;
}
我搜索时似乎找不到任何有关此问题的信息(我猜我没有使用正确的关键字)。这也发生在多个设备上 运行 不同版本的 Android(N5 5.1,O+O 4.4)并且只有这个特定字段有这个问题,所有其他 EditText 字段都没有问题。
这与 ListView
的过滤器功能的内置功能有关。正如 JonasCz 指出的那样,可以找到如何解决这个问题 here。我的代码更改为 onQueryTextChange()
方法来解决此问题(基本上使用 Adapter
的过滤器功能):
@Override
public boolean onQueryTextChange(String newText) {
Filter filter = adapter.getFilter();
if (TextUtils.isEmpty(newText)) {
filter.filter("");
} else {
filter.filter(newText);
}
return true;
}