如何在Google Play商店应用中设置Android SearchView风格?

d37*_*3ur 11 android themes android-appcompat google-play searchview

我想风格SearchViewtoolbar看/作用相似SearchViewGoogle Play Store app.它似乎将搜索视图包装在一个cardview中,但它似乎也整合了按钮/抽屉切换行为.

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

MainActivity SearchView

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

在此输入图像描述

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

在此输入图像描述

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

在此输入图像描述

当我自己尝试这样做时,我遇到了很多问题.我试图将searchview包装在cardview中并将其放在工具栏中.它的工作原理但左边总是有填充,我无法删除(我试过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>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我还试图删除工具栏,只用FrameLayout替换它.这允许我控制填充但显然我丢失了工具栏功能(向上按钮等)并且还引入了主题问题(图标和文本消失).

有谁知道他们是怎么做的?我不想仅仅为框架中已存在的样式小部件添加另一个库.谢谢!

R. *_*ski 10

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

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

对于Lollipop或Marshmallow,或N,它有SearchEditTextLayout你需要的东西:

优点

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

  • 我查看了源代码,发现它们只是创建了一个复合视图并以自定义方式处理了所有内容.我不知道为什么他们不能只是概括工具栏,以便你可以按照自己的方式自定义它.事实上,如果你想在旧的ActionBar成语之外走一点,那就毫无意义了.我的意思是我甚至无法弄清楚如何删除左侧填充.我最终继承了一个framelayout并做了我自己的事情.谢谢你的提示! (2认同)