Поиск в Google похож на SearchView

Я хотел бы установить серый цвет (значки и текст), но теперь он отображается как белый цвет.

<LinearLayout
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:orientation = "horizontal"
    android:gravity = "end">

    <TextView
        android:id = "@+id/tv_toolbar_title"
        android:layout_width = "0dp"
        android:layout_weight = "1"
        android:layout_height = "wrap_content"
        android:layout_gravity = "center_vertical"
        android:text = "Titulo_ventana"/>

    <LinearLayout
        android:layout_width = "wrap_content"
        android:layout_height = "match_parent"
        android:gravity = "end"
        android:orientation = "horizontal"
        android:padding = "10dp">

        <android.support.v7.widget.CardView
            android:layout_width = "match_parent"
            android:layout_height = "match_parent"
            android:elevation = "@dimen/cardview_default_elevation">

            <android.support.v7.widget.SearchView
                android:id = "@+id/mySearchview"
                android:label = "@string/app_name"
                android:layout_width = "wrap_content"
                android:layout_height = "match_parent"
                android:theme = "@style/Base.Widget.AppCompat.SearchView">
            </android.support.v7.widget.SearchView>

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


    </LinearLayout>



</LinearLayout>

Я хотел бы получить что-то вроде этого вида поиска на панели инструментов и серого цвета текста:

Значки левого и правого меню необязательны. Просмотр поиска по умолчанию складывается, я не возражаю, если эту функцию нужно изменить.

Поиск в Google похож на SearchView

Можете также сделать снимок экрана своей версии?

TheLittleNaruto 16.05.2018 13:03
4
1
672
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Чтобы изменить цвет текста, поместите это в свой styles.xml:

<style name = "MySearchView" parent = "Base.Widget.AppCompat.SearchView">
    <item name = "android:editTextColor">@color/text_color</item>
    <item name = "android:textColorHint">@color/hint_color</item>
</style>

Замените @color/text_color и @color/hint_color в соответствии с вашими потребностями.

А затем измените атрибут темы SearchView в макете XML:

<android.support.v7.widget.SearchView
    android:id = "@+id/mySearchview"
    android:label = "@string/app_name"
    android:layout_width = "wrap_content"
    android:layout_height = "match_parent"
    android:theme = "@style/MySearchView">
</android.support.v7.widget.SearchView>

@Ricardo Цвет текста не изменился (после того, как вы напечатали текст)? Я отредактировал свой ответ, чтобы учесть текст «подсказки».

JohnTheWalker 16.05.2018 15:32

Как будто стиль игнорируется. Наконец, я попробовал ответить @MayourPatel, и он заработал!

Ricardo 16.05.2018 15:34

У меня есть одно решение, которое отлично работает в моем приложении. Вы можете попробовать это.

EditText txtSearch = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
txtSearch.setHint(getResources().getString(R.string.search));
txtSearch.setHintTextColor(Color.GRAY);
txtSearch.setTextColor(Color.GRAY);

You can set the background of search view

<android.support.v7.widget.SearchView
            android:id = "@+id/searchViewContact"
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:layout_centerVertical = "true"
            app:searchIcon = "@mipmap/icon_search"
            app:closeIcon = "@mipmap/icon_close"
            android:background = "@drawable/search_view_background"
            android:layout_margin = "5dp">
</android.support.v7.widget.SearchView>

search_view_background.xml

<?xml version = "1.0" encoding = "utf-8"?>
<shape xmlns:android = "http://schemas.android.com/apk/res/android"
       android:shape = "rectangle">
    <solid android:color = "#dcdee1"/>
    <stroke
        android:color = "#d7d3d3"
        android:width = "1dp"/>
    <corners
        android:radius = "5dp"/>
</shape>
Ответ принят как подходящий

Вид поиска, которого вы хотите достичь, на самом деле не является SearchView. Это нестандартный компонент. Вот дерево представлений, которое можно получить с помощью инструмента Наблюдатель иерархии:

Вот OverlaySearchPlateContainer:

Как видно из названия пакета, он поставляется с Play Services, поэтому исходный код недоступен.

Тем не менее, мы можем сравнить это дерево с деревом SearchView. Вот дерево, которое можно получить при использовании обычного SearchView:

Таким образом, вы можете видеть, что OverlaySearchPlateContainer является нет потомком SearchView, поэтому пользовательский интерфейс, которого вы хотите достичь, не может быть реализован с использованием только стилей / тем.

Я бы рекомендовал не изобретать велосипед и использовать сторонние библиотеки, например SearchBar-SearchView, где виджет SearchView выглядит так:

Даже если этот ответ не соответствует моим требованиям, это, безусловно, лучший ответ с точки зрения обучения.

Ricardo 16.05.2018 15:10

Другие вопросы по теме