2012-12-22 43 views
29

我想禁用搜索视图组件内显示的Mag图标。任何想法如何引用它,并将其删除或替换为另一个可绘制的?Android SearchView图标

enter image description here

+3

想知道为什么会有人下来投票的问题吗? –

+0

SearchView图标下面的白线怎么样 - 如何定制它? – AndrewS

+0

你有没有想过这个? – theblang

回答

6

在你的主题:

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

编辑:
searchViewSearchIcon是私有属性。因此,此答案无效(在本机ActionBar上)。

+3

将其设置为'@android:color/transparent'将其删除,或将其更改为您想要的。 –

+0

@Mattias非常感谢:D –

+0

是否有任何可以修改的地方? –

14

由于该问题的措辞中没有提及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); 

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

希望这会有所帮助。

+0

我正在使用appcompat SearchView和我有图标里面编辑文本框和我不能让它消失。你有其他想法吗? – AndrewS

+0

你应该检查你的库是哪个版本,并查看它的源代码,特别是在布局文件中。例如,如果你看看[这个Android源码](http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/frameworks/base/core /res/res/layout/search_view.xml),你会看到'search_mag_icon'在'search_plate'之外。通过源代码,您可以推导出在布局中“查找”哪些元素。 – Stan

+0

我有SupportLibrary的最后一个版本,并且在资源中search_mag_icon位于任何地方。可能是那个图标不是search_mag_icon,而是SearchAutoComplete里面的一些图标? 我如何找到资源? – AndrewS

1

如果您使用的是v7应用程序compat库,则可以在主题中轻松更改此设置。在从AppCompat主题延伸的主题中,只需添加一条线,如:

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

此图标为提示。所以你可以简单地设置新的提示文本。

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

    searchPlate.setHint("Search"); 

如果你想要的图标作为提示文本使用spanable串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); 
2

要删除的提示搜索按钮:

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

这些行雷莫VED放大镜:

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

你必须在你的菜单项中加入这一行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); 
} 
2

你必须定制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" /> 

希望它能帮助!

0

在你的主题风格包括此:

<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定义搜索查看的风格,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是搜索字段右侧的关闭图标。

0

在搜索查看XML组件旁边添加:

app:searchHintIcon="@null"