2016-10-19 84 views
2

我正在實施SearchView。我已成功添加搜索視圖及其所有功能。現在我想讓它看起來很棒。Android Actionbar SearchView更改圖標並刪除多餘間距

我需要兩個改變我嘗試每一件事情,但沒有什麼工作對我來說:

  1. 我想改變搜索圖標。
  2. 我想刪除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