【问题标题】:How to style Android SearchView like in Google Play Store app?如何在 Google Play 商店应用中设置 Android SearchView 的样式?
【发布时间】:2016-11-14 14:44:38
【问题描述】:

我正在尝试在toolbar 中设置SearchView 的样式,使其看起来/行为类似于Google Play Store app 中的SearchView。它似乎将搜索视图包装在卡片视图中,但它似乎也集成了向上按钮/抽屉切换行为。

这是主要的活动 searchView,它集成了抽屉切换

当您单击它时,抽屉切换变为箭头(单击时将从搜索视图中移除焦点)

当您点击商店中的应用程序时,您会转到应用程序详细信息页面,您会看到搜索视图的图标化版本,作为带有向上按钮的折叠操作项:

最后,如果您点击搜索图标,它会展开为一个操作项(带有一种波纹动画)并一直显示在屏幕上,并包含向上按钮:

当我尝试自己做时,我遇到了很多问题。我试图将搜索视图包装在卡片视图中并将其放在工具栏中。它可以工作,但左侧总是有我无法删除的填充(我尝试了 contentInsetStart,不起作用):

<android.support.v7.widget.Toolbar
    android:id="@+id/activityCatalogToolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:popupTheme="@style/AppTheme.PopupOverlay"
    android:theme="@style/AppTheme.AppBarOverlay"
    app:contentInsetStart="0dp"
    app:contentInsetLeft="0dp">

    <android.support.v7.widget.CardView
        android:id="@+id/activityCatalogSearchContainer"
        android:layout_height="match_parent"
        android:layout_width="wrap_content"
        android:layout_gravity="end"
        android:layout_marginTop="4dp"
        android:layout_marginBottom="4dp"
        android:layout_marginRight="8dp"
        android:layout_marginLeft="8dp"
        app:cardCornerRadius="4dp"
        app:cardElevation="8dp">

        <android.support.v7.widget.SearchView
            android:id="@+id/activityCatalogSearch"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:queryHint=""
            android:iconifiedByDefault="false"/>

    </android.support.v7.widget.CardView>

</android.support.v7.widget.Toolbar>

我还尝试删除工具栏并仅将其替换为 FrameLayout。这允许我控制填充,但显然我失去了工具栏功能(向上按钮等)并且还引入了主题问题(图标和文本消失)。

有人知道他们是如何做到这一点的吗?我不想添加另一个库只是为了对框架中已经存在的小部件进行样式设置。谢谢!

【问题讨论】:

标签: android google-play themes android-appcompat searchview


【解决方案1】:

你必须使用SearchView的这个自定义实现。

https://github.com/Quinny898/PersistentSearch

Android 工作室:

如果您尚未添加 Sonatype 存储库,请添加:

maven {
        url "https://oss.sonatype.org/content/repositories/snapshots"
    }

将其作为依赖项导入:

compile 'com.quinny898.library.persistentsearch:library:1.1.0-SNAPSHOT'

在您的布局中:

<com.quinny898.library.persistentsearch.SearchBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/searchbox"
        />

输出:

【讨论】:

  • 这个库已被弃用,我不想添加所有额外的功能,因为在我的情况下这只是一个主题问题。最终滚动了我自己的复合视图。
  • @TrevinAvery 这个也没有得到积极维护(参见自述文件)
【解决方案2】:

您可以尝试深入研究这个项目:

https://android.googlesource.com/platform/packages/apps/Dialer/

对于 Lollipop 或 Marshmallow,或 N,它有一个 SearchEditTextLayout,这正是您所需要的:

优势

  • 由 Google 而非第三方制作的代码。

【讨论】:

  • 我查看了源代码,发现他们只是创建了一个复合视图并以自定义方式处理所有内容。我不知道他们为什么不能将 Toolbar 概括为您可以按照自己的方式对其进行自定义。事实上,如果你想稍微超越旧的 ActionBar 习语,那是没有意义的。我的意思是我什至无法弄清楚如何删除左边的填充。我最终继承了一个框架布局并做我自己的事情。感谢您的提示!
【解决方案3】:

我自己正在尝试构建它。最后只是将搜索按钮设置为 ImageButton。单击此按钮将触发要在顶部添加的片段,该片段将在布局中包含一个 Edittext,使其看起来像这样。并且此片段包含此搜索框下方的列表视图以显示建议。

提示:保持 Fragment 的 rootlayout 没有任何背景,并将 clickable 设置为 true 以使用透明窗格获得最佳效果

【讨论】:

  • 如果你愿意,我可以在一两个小时内发布布局。目前无权访问。顺便说一句,这样做可以进行很多自定义,包括通过 Web 等从异步源获取建议......
  • 我也想做同样的事情。您可以将示例代码上传到 paste.ubuntu 之类的地方吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多