为什么android.widget.SearchView不能一键展开,而是将图标移到左侧?

问题描述 投票:0回答:1

我正在android.widget.SearchView中使用MaterialToolbar,并且还在菜单源文件中设置了正确的属性。但是,当我单击搜索图标时,它不会展开。而是,搜索图标移到左侧。再次单击它时,它会展开,但搜索图标仍会出现在EditText内。

布局文件

<com.google.android.material.appbar.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <com.google.android.material.appbar.MaterialToolbar
        android:id="@+id/toolbar"
        style="@style/Widget.MaterialComponents.Toolbar.Primary"
        android:layout_width="match_parent"
        android:layout_height="?actionBarSize"
        app:title="@string/app_name" />

</com.google.android.material.appbar.AppBarLayout>

菜单文件

<?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"
        android:title="@string/action_search"
        android:icon="@drawable/ic_search"
        app:showAsAction="ifRoom|collapseActionView"
        app:actionViewClass="android.widget.SearchView" />

</menu>

点击前

Before clicking

单击后

After clicking

SearchView hint

android toolbar searchview
1个回答
0
投票

尽管文档建议使用框架SearchView,但我一直发现support / androidx SearchView在库组件(例如AppCompatActivityMaterialToolbar等)中表现得更好。不确定是什么原因导致这些小故障。实际上,在展开时使用androidx.appcompat.widget.SearchView代替android.widget.SearchView代替了actionViewClass放错位置的搜索图标。

但是,默认情况下,AutoCompleteTextView内的SearchView仍具有类似的搜索图标作为提示。该提示似乎仅通过布局XML属性设置,因此我们需要为菜单操作提供“整个”布局,而不仅仅是类名。例如,我们单独的布局search_view.xml

<androidx.appcompat.widget.SearchView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/search_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:searchHintIcon="@null" />

searchHintIcon属性提供该提示图标,并将其设置为@null将完全禁用该提示。

然后将该布局设置为<item>app:actionLayout,而不是设置app:actionClass。也就是说,将app:actionViewClass="android.widget.SearchView"替换为app:actionLayout="@layout/your_search_view_layout"

© www.soinside.com 2019 - 2024. All rights reserved.