簡體   English   中英

Android SearchView圖標

[英]Android SearchView Icon

我想禁用搜索視圖組件中顯示的Mag圖標。 知道如何引用它並刪除它或用另一個drawable替換它?

在此輸入圖像描述

由於問題的措辭不包含ActionBarSherlock任何提及(標記除外),並且添加了注釋,接受的答案不適用於標准和/或支持庫操作欄,我發布了另一個答案。 這是onCreate的Java代碼:

// obtain action bar
ActionBar actionBar = getSupportActionBar();

// find SearchView (im my case it's in a custom layout because of left alignment)
View v = actionBar.getCustomView();
SearchView searchView = (SearchView)v.findViewById(R.id.search_view);
ImageView icon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);

// method 1: does not work persistently, because the next line
// should be probably called after every manipulation with SearchView
// icon.setVisibility(View.GONE);

// method 2: working code
icon.setAdjustViewBounds(true);
icon.setMaxWidth(0);
icon.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
icon.setImageDrawable(null);

根據這篇文章 ,當使用來自支持庫的SearchView (在我的情況下為android-support-v7-appcompat )和setIconifiedByDefault(false) ,圖標顯示在編輯文本框( SearchAutoComplete )之外。 否則( setIconifiedByDefault(true) )它會顯示在框內。 默認情況下,顯示的代碼用於禁用“圖標化”,並且可能需要進行一些更改才能使用“圖標化”搜索視圖。 我不知道ActionBarSherlock是否同樣適用。

希望這可以幫助。

這個圖標是提示。 所以你可以簡單地設置新的提示文本。

int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
    EditText searchPlate = (EditText) searchView.findViewById(searchPlateId);

    searchPlate.setHint("Search");

如果您希望圖標作為提示文本,請使用帶ImageSpan的可跨越字符串

int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
    EditText searchPlate = (EditText) searchView.findViewById(searchPlateId);


    searchPlate.setTextColor(getResources().getColor(R.color.search_text_color));
    SpannableString string = new SpannableString(" ");
    Drawable d = getResources().getDrawable(R.drawable.ic_search);
    d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
    ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM);
    string.setSpan(span, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
    searchPlate.setHint(string);

在你的主題中:

<style name="Theme" parent="Your parent theme">
<item name="android:searchViewSearchIcon">@android:drawable/ic_search</item>
</style>

編輯:
searchViewSearchIcon是一個私有屬性。 因此,這個答案不起作用(在本機ActionBar上)。

要刪除提示搜索按鈕:

mNearMeSearchBar = (SearchView) mView.findViewById(R.id.nearme_search_component_nearme_edittext);
mNearMeSearchBar.setIconifiedByDefault(false); //Removes Search Hint Icon

要更改可繪制的搜索按鈕:

int searchImgId = getResources().getIdentifier("android:id/search_mag_icon", null, null);
ImageView v = (ImageView) mNearMeSearchBar.findViewById(searchImgId);
v.setImageResource(R.drawable.ic_compass);

你必須在你的MenuItem android:iconifiedByDefault="@android:color/transparent"添加這一行android:iconifiedByDefault="@android:color/transparent"

<item
    android:id="@+id/activity_home_action_search"
    android:icon="@drawable/ic_action_search"
    android:title="@string/activity_home_search_title"
    android:iconifiedByDefault="@android:color/transparent"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="always|collapseActionView" />

或者您可以以編程方式進行searchView.setIconifiedByDefault(true);

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    getMenuInflater().inflate(R.menu.home, menu);

    MenuItem searchMenuItem = menu.findItem(R.id.activity_home_action_search);

    SearchView searchView = (SearchView) searchMenuItem.getActionView();
    searchView.setIconifiedByDefault(true);
}

您必須自定義SearchView樣式,如下所示:

<style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView">
    <!-- Search button icon -->
    <item name="searchIcon">@drawable/ic_arrow_back</item>
</style>

然后將其添加到AppTheme

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!--   your other colors and styles -->
    <item name="searchViewStyle">@style/MySearchViewStyle</item>
</style>

並使用標記style將其應用於搜索視圖:

<android.support.v7.widget.SearchView
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/searchView"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            app:queryHint="@string/search_hint"
            android:focusable="true"
            android:focusableInTouchMode="true"
            style="@style/MySearchViewStyle"
            app:iconifiedByDefault="false" />

希望能幫助到你!

如果您使用的是v7 app compat庫,則可以在主題中輕松更改此內容。 在從AppCompat主題擴展的主題中,只需添加以下行:

<item name="searchViewSearchIcon">@drawable/ic_search</item>

這些線條取消了放大鏡:

    //remove search icon
    mSearchView.setIconifiedByDefault(false);
    ImageView icon = (ImageView) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
    icon.setVisibility(View.GONE);

在您的主題風格中包括:

<style name="YourTheme.Toolbar">
    <item name="searchViewStyle">@style/YourActionBarSearch</item>
    <item name="editTextColor">@color/your_ab_text_color</item>
    <item name="android:textColorHint">@color/your_ab_hint_color</item>
</style>

您現在可以使用searchViewStyle定義SearchView的樣式,而editTextColor將在搜索框中設置文本的顏色。 通過設置android:textColorHint您還將設置提示的顏色,例如“搜索...”。

<style name="YourActionBarSearch" parent="@style/Widget.Holo.SearchView">
    <item name="searchIcon">@drawable/ic_ab_search</item>
    <item name="queryBackground">@null</item>
    <item name="submitBackground">@null</item>
    <item name="searchHintIcon">@null</item>
    <item name="defaultQueryHint">@null</item>
    <item name="closeIcon">@drawable/ic_ab_small_search_close</item>
</style>

這將根據您的喜好設置搜索視圖的樣式,或多或少。 字段searchIcon是操作欄中的圖標。 字段searchHintIcon是搜索字段中提示左側的小圖標 ,您在問題中要求提供該圖標 ; 將其設置為@null以刪除圖標。 字段closeIcon是搜索字段右側的關閉圖標。

在searchView組件的xml中添加下一個:

app:searchHintIcon="@null"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM