【问题标题】:Android Tabbed Activity Searchview not opening in ToolbarAndroid 选项卡式活动搜索视图未在工具栏中打开
【发布时间】:2017-07-06 08:45:01
【问题描述】:

问题
我使用了官方 Android 文档中的 Setting Up The Search interface 文档,但由于某些奇怪的原因,我并没有走得太远,因为 SearchView 拒绝在 Toolbar 中打开 cfr. Android docs

代码
我已经添加了这样的菜单项:

<menu 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"
    tools:context="...">

    <item
        android:id="@+id/action_search"
        android:title="@string/action_search"
        android:icon="@android:drawable/ic_menu_search"
        app:showAsAction="collapseActionView|ifRoom"
        android:actionViewClass="android.widget.SearchView"/>
</menu>

(旁注,我也尝试过 v7 SearchView 视图类,但结果没有什么不同)


这就是工具栏的布局方式

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="@dimen/appbar_padding_top"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        app:theme="@style/AppTheme.Toolbar"
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|enterAlways"
        app:popupTheme="@style/AppTheme.PopupOverlay">
    </android.support.v7.widget.Toolbar>

</android.support.design.widget.AppBarLayout>

我还在清单中添加了SEARCH 意图,并且菜单在onCreateOptionsMenu 方法中得到正确膨胀。

编辑、manifest.xml 和 searchable.xml 根据要求添加了这些,尽管我认为它们与问题无关。

<activity
    android:name=".HomeActivity"
    android:label="@string/app_name"
    android:theme="@style/AppTheme.NoActionBar">
    <meta-data
        android:name="android.app.searchable"
        android:resource="@xml/searchable" />
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <action android:name="android.intent.action.VIEW" />
        <action android:name="android.intent.action.SEND" />
        <action android:name="android.intent.action.SEARCH" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

可搜索的.xml

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_name"
    android:hint="" />

现在根据 Android 文档,SearchView 应该会出现,但是当我按下 Toolbar 中的搜索图标时,什么也没有发生。

有什么想法可能是错的吗?

【问题讨论】:

  • 添加您的清单文件和带有问题的 searchable.xml 文件
  • @NileshRathod 我已经添加了清单和可搜索的 xml

标签: android android-toolbar searchview android-search


【解决方案1】:

使用“android.support.v7.widget.SearchView”等菜单项

<item
    android:id="@+id/action_search"
    android:icon="@drawable/ic_search"
    android:title="@string/lbl_search"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="ifRoom" />

【讨论】:

  • 正如我在问题中所指出的,我也尝试过使用 v7 SearchView,但结果没有什么不同
【解决方案2】:

我得到了解决方案,我的朋友试试这个在活动标签之外添加你的元标签

将您的菜单替换为

<?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="Search"
    android:icon="@android:drawable/ic_menu_search"
    app:showAsAction="collapseActionView|ifRoom"
    app:actionViewClass="android.support.v7.widget.SearchView"/>
</menu>

现在在您的活动中编写这行代码

    Toolbar toolbar= (Toolbar) findViewById(R.id.mytoolbar);
    setSupportActionBar(toolbar);



<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="pkgname">
<application
    android:name=".Utils.Application"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
<meta-data
    android:name="android.app.searchable"
    android:resource="@xml/searchable" />
<activity
android:name=".HomeActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <action android:name="android.intent.action.VIEW" />
    <action android:name="android.intent.action.SEND" />
    <action android:name="android.intent.action.SEARCH" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

【讨论】:

  • 尝试将meta-data 移到activity 之外,但没有成功,SearchView 仍然不会出现
  • 从收费栏中删除 app:theme="@style/AppTheme.Toolbar" 而不是尝试
  • @LiamMartens 用我的代码尝试一次 app:actionViewClass="android.support.v7.widget.SearchView"
  • 试过了还是没有解决办法,应该是别的原因吧?
  • @LiamMartens 我只是将您的代码复制粘贴到我的设备中并正常工作
【解决方案3】:

环顾四周后,我终于找到了解决方案。 android:actionViewClass 应该是 app:actionViewClass

Android 文档中从未指出这一点。

【讨论】:

    猜你喜欢
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    相关资源
    最近更新 更多