2016-10-19 10 views
2

Я реализую SearchView. Я успешно добавил поиск и все его функциональные возможности. Теперь я хочу, чтобы он выглядел отлично.Android-панель поиска SearchView для изменения значка и удаления дополнительного интервала

мне нужно два изменения я попробовал все, но ничего не работает для меня:

  1. Я хочу изменить значок поиска.
  2. Я хочу удалить дополнительные интервалы в левой части searchView.

Это, как в настоящее время мой SearchView выглядит следующим образом:

enter image description here

И вот что я хочу сделать

enter image description here

меню/menu_search_action.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
tools:context=".MainActivity"> 

<item 
    android:id="@+id/action_search" 
    android:icon="@drawable/location_icon" 
    android:orderInCategory="100" 
    android:title="@string/action_search" 
    app:actionViewClass="android.support.v7.widget.SearchView" 
    app:showAsAction="always|collapseActionView" /> 

SearchCategoriesActivity.java

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu_search_action, menu); 


    MenuItem searchItem = menu.findItem(R.id.action_search); 
    searchItem.expandActionView(); 
    MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() { 
     @Override 
     public boolean onMenuItemActionExpand(MenuItem item) { 

      return true; 
     } 

     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) { 

      //DO SOMETHING WHEN THE SEARCHVIEW IS CLOSING 
      back(); 
      return false; 
     } 
    }); 

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    searchView = (SearchView) MenuItemCompat 
      .getActionView(searchItem); 
    if (searchView != null) { 
     searchView.setSearchableInfo(searchManager 
       .getSearchableInfo(getComponentName())); 
     searchView.setIconifiedByDefault(false); 
     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
        @Override 
        public boolean onQueryTextSubmit(String query) { 
         callSearch(query); 
         return true; 
        } 

        @Override 
        public boolean onQueryTextChange(String newText) { 
         callSearch(newText); 
         return true; 
        } 
       }); 
    } 

    for (TextView textView : findChildrenByClass(searchView, TextView.class)) { 
     textView.setTextColor(Color.WHITE); 
    } 
    return super.onCreateOptionsMenu(menu); 

} 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      back(); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

@Override 
public void onBackPressed() { 
    back(); 
} 

private void back() { 
    finish(); 
} 

public static <V extends View> Collection<V> findChildrenByClass(
     ViewGroup viewGroup, Class<V> clazz) { 
    return gatherChildrenByClass(viewGroup, clazz, new ArrayList<V>()); 
} 

private static <V extends View> Collection<V> gatherChildrenByClass(
     ViewGroup viewGroup, Class<V> clazz, Collection<V> childrenFound) { 

    for (int i = 0; i < viewGroup.getChildCount(); i++) { 
     final View child = viewGroup.getChildAt(i); 
     if (clazz.isAssignableFrom(child.getClass())) { 
      childrenFound.add((V) child); 
     } 
     if (child instanceof ViewGroup) { 
      gatherChildrenByClass((ViewGroup) child, clazz, childrenFound); 
     } 
    } 

    return childrenFound; 
} 

ответ

4

Добавить отдельную Theme следующим образом для изменения значка поиска.

<style name="AppTheme.SearchView" parent="Widget.AppCompat.SearchView"> 
    <item name="searchIcon">@mipmap/ic_search_white</item> 
    <item name="closeIcon">@mipmap/ic_clear_white</item> 
</style> 

Внутри вашего Base Theme

<!-- Base application theme. --> 
<style name="MyMaterialTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar"> 

    <item name="searchViewStyle">@style/AppTheme.SearchView</item> 

</style> 
+0

Он отлично работает! Спасибо за это. Что относительно полей? Если у вас есть что-то, чтобы решить эту проблему, это будет здорово. –

+1

Полезно знать. Я посмотрю что я могу сделать. – vidulaJ