繁体   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