Библиотека поддержки Android SearchView XML-атрибуты queryHint и iconifiedByDefault не работают

У меня есть следующий SearchView в файле макета

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

     />

Однако, когда я запускаю свое приложение, подсказка не появляется, и вид поиска отображается в виде значка, в коде он работает, мой вопрос: это ошибка в библиотеке поддержки?


person forcewill    schedule 30.10.2013    source источник


Ответы (1)


У вас отсутствует необходимое пространство имен. Замените [yourapp] именем вашего приложения в макете XML. Используйте это пространство имен для свойств SearchView. Такой подход необходим, если вы используете представления из библиотеки поддержки. Кстати. вы должны сделать то же самое с меню для панели действий AppCompat< /а>.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:[yourapp]="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.SearchView
        android:id="@+id/fragment_address_search"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/global_bg_front"
        android:textSize="@dimen/global_text_medium"
        android:textColor="@color/global_text_primary"
        [yourapp]:queryHint="@string/fragment_address_search_hint"
        [yourapp]:iconifiedByDefault="false" />

</LinearLayout>

Вы также можете настроить SearchView программно. См. мой шаблон на GitHub.

private void setupSearchView(SearchView searchView)
{
    // search hint
    searchView.setQueryHint(getString(R.string.fragment_address_search_hint));

    // background
    View searchPlate = searchView.findViewById(android.support.v7.appcompat.R.id.search_plate);
    searchPlate.setBackgroundResource(R.drawable.searchview_bg);

    // icon
    ImageView searchIcon = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
    searchIcon.setImageResource(R.drawable.searchview_icon);

    // clear button
    ImageView searchClose = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
    searchClose.setImageResource(R.drawable.searchview_clear);

    // text color
    AutoCompleteTextView searchText = (AutoCompleteTextView) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
    searchText.setTextColor(getResources().getColor(R.color.global_text_primary));
    searchText.setHintTextColor(getResources().getColor(R.color.global_text_secondary));
}
person petrnohejl    schedule 03.12.2013
comment
Спасибо, я знал, как это работает для AppCompact, но не знал, что то же самое для библиотеки поддержки. - person forcewill; 07.12.2013
comment
Можете ли вы помочь мне, как сделать searchIcon GONE и не использовать пробел перед подсказкой? - person AndrewS; 13.01.2014
comment
AndrewS: Попробуйте использовать AutoCompleteTextView вместо SearchView. - person petrnohejl; 13.01.2014