【问题标题】:Android SearchView IconAndroid SearchView 图标
【发布时间】:2012-12-09 23:29:33
【问题描述】:

我想禁用显示在搜索视图组件中的 Mag 图标。知道如何引用它并将其删除或用另一个可绘制对象替换它吗?

【问题讨论】:

  • 想知道为什么有人会否决这个问题?
  • SearchView 图标下方的白线怎么样 - 如何自定义?
  • 你有想过这个吗?
  • @mattblang 是的。请给我发电子邮件我会尝试提取代码并分享它

标签: android android-actionbar actionbarsherlock searchview


【解决方案1】:

由于问题的措辞不包含任何提及ActionBarSherlock(标签除外)并且已添加 cmets 接受的答案不适用于标准和/或支持库操作栏,我发布另一个答案。这是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);

根据这个post,同时使用支持库中的SearchView(在我的情况下为android-support-v7-appcompat)和setIconifiedByDefault(false),图标显示在编辑文本框(SearchAutoComplete)之外。否则 (setIconifiedByDefault(true)) 它会显示在框内。默认情况下,呈现的代码用于禁用“图标化”,并且可能需要进行一些更改才能与“图标化”搜索视图一起使用。我不知道这是否同样适用于ActionBarSherlock

希望这会有所帮助。

【讨论】:

  • 我正在使用 appcompat SearchView,我在编辑文本框中有那个图标,我无法让它消失。您还有其他想法吗?
  • 您可能应该检查您的库是哪个版本并查看其来源,特别是在布局文件中。例如,如果您查看this Android sources,您会看到search_mag_iconsearch_plate 之外。通过源代码,您可以推断要在布局中“找到”哪些元素。
  • 我拥有 SupportLibrary 的最新版本,并且在资源中 search_mag_icon 无处不在。可能该图标不是 search_mag_icon 而是 SearchAutoComplete 中的某个图标?我怎样才能找到这方面的资源?
  • 好吧,我昨天也更新了库,上面的代码对我有用。我想您的项目中可能还有其他特定的东西。您能否在单独的问题中发布一些代码和详细解释,说明问题所在?
  • @Andrew,不,我没有。
【解决方案2】:

这个图标是提示。所以你可以简单地设置新的提示文本。

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);

【讨论】:

    【解决方案3】:

    在您的主题中:

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

    编辑:
    searchViewSearchIcon 是私有属性。因此,此答案不起作用(在本机 ActionBar 上)。

    【讨论】:

    • 将其设置为 @android:color/transparent 以将其删除,或将其更改为您想要的。
    • 天哪。这太棒了。非常感谢。我不必再发布与操作栏样式相关的问题了:D
    • 嗨 @Ahmad 我正在使用 但它给了我“找不到与给定名称匹配的资源:attr 'android:searchViewSearchIcon'”
    • android:searchViewSearchIcon 是私有的。这个答案根本不起作用。
    • 适用于我的 2.3 到 4.4 的 ABC。谢谢!
    【解决方案4】:

    你必须在你的 MenuItem 中添加这一行 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);
    }
    

    【讨论】:

      【解决方案5】:

      移除提示搜索按钮:

      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);
      

      【讨论】:

        【解决方案6】:

        您必须像这样自定义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" />
        

        希望对你有帮助!

        【讨论】:

          【解决方案7】:

          如果您使用的是 v7 应用兼容库,您可以在主题中轻松更改它。在从 AppCompat 主题扩展的主题中,只需添加如下一行:

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

          【讨论】:

            【解决方案8】:

            这些行去掉了放大镜:

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

            【讨论】:

              【解决方案9】:

              在您的主题风格中包含以下内容:

              <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 字段是搜索字段右侧的关闭图标。

              【讨论】:

                【解决方案10】:

                在searchView组件的xml中添加下一个:

                app:searchHintIcon="@null"
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-07-15
                  • 2014-11-30
                  • 2018-03-02
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-01-11
                  • 2016-07-08
                  相关资源
                  最近更新 更多