web-dev-qa-db-ja.com

AndroidサポートライブラリSearchViewxml属性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"

     />

しかし、アプリケーションを実行すると、ヒントが表示されず、検索ビューがアイコン化されます。コードでは、これはサポートライブラリのバグですか?

15
forcewill

必要な名前空間がありません。 [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));
}
41
petrnohejl