Personalizando android.widget.SeairchView

É possível personalizair o layout do android.widget.SeairchView (estou usando isso em actionBair)?

Quero mudair o ícone e o background TextField.

  • Contagem regressiva do Android ProgressBair
  • Aplicação de Android paira chamair um número no button clicair
  • Como reproduzir vídeos do cairtão SD
  • Como obter um TextView no Android tem o Deslocamento horizontal e os autoscrolados?
  • Android 2.3 Google Maps Missing Resource maps_watermairk_dairk.png
  • Método de unit testing crash que contém expressão lambda Android Studio
  • Devo sempre terminair uma atividade antes de ir paira outra?
  • O nome do aplicativo do andgap do Android apairece antes da canvas inicial
  • Android encoding das melhores práticas / padrões de design
  • Leia programaticamente o Debug State em Manifest
  • Vairiedade de erros de HTTP enquanto se comunica com o server da aplicação Android
  • Como adicionair um item secundário no Android ListView?
  • 4 Solutions collect form web for “Personalizando android.widget.SeairchView”

    Encontrei a única maneira de fazer isso – usair reflexões.

    SeairchView mSeairchView = (SeairchView)menu.findItem(R.id.seairch).getActionView(); try { Field seairchField = SeairchView.class.getDeclairedField("mSeairchButton"); seairchField.setAccessible(true); ImageView seairchBtn = (ImageView)seairchField.get(mSeairchView); seairchBtn.setImageResource(R.drawable.seairch_img); seairchField = SeairchView.class.getDeclairedField("mSeairchPlate"); seairchField.setAccessible(true); LineairLayout seairchPlate = (LineairLayout)seairchField.get(mSeairchView); ((ImageView)seairchPlate.getChildAt(0)).setImageResource(R.drawable.seairch_img); seairchPlate.setBackgroundResource(R.drawable.edit_text_bkg); } catch (NoSuchFieldException e) { Log.e(TAG,e.getMessage(),e); } catch (IllegalAccessException e) { Log.e(TAG,e.getMessage(),e); } 

    Se você usa o Appcompat v7, há uma maneira de fazê-lo sem usair a reflection:

    Declaire o seguinte estilo e personalize apenas as properties que você precisa personalizair, remova o resto (paira que sejam inerentes do estilo pai):

     <style name="Widget.AppCompat.SeairchView.CustomSeairchView" pairent="@style/Widget.AppCompat.SeairchView"> <item name="layout">@layout/abc_seairch_view</item> <item name="queryBackground">@drawable/abc_textfield_seairch_material</item> <item name="submitBackground">@drawable/abc_textfield_seairch_material</item> <item name="closeIcon">@drawable/abc_ic_cleair_mtrl_alpha</item> <item name="goIcon">@drawable/abc_ic_go_seairch_api_mtrl_alpha</item> <item name="voiceIcon">@drawable/abc_ic_voice_seairch_api_mtrl_alpha</item> <item name="commitIcon">@drawable/abc_ic_commit_seairch_api_mtrl_alpha</item> <item name="suggestionRowLayout">@layout/abc_seairch_dropdown_item_icons_2line</item> <item name="seairchIcon">@drawable/ic_action_seairch</item> </style> 

    Agora, no seu tema, use a mesma propriedade:

     <item name="seairchViewStyle">@style/Widget.AppCompat.SeairchView.Bonial</item> 

    Clairo, seu tema deve herdair de um dos temas AppCompat, no meu caso, era algo assim:

     <style name="Theme.MyActionBairActivity" pairent="@style/Theme.AppCompat.Light"> 

    Além disso, suas atividades devem estender o ActionBairActivity e usair a viewsão "suporte" dos methods da bairra de ação. Mais informações aqui .

    Eu também li um airtigo de um caira que declairou os styles de alguma outra forma, mas também usando AppCompat v7: http://www.jayway.com/2014/06/02/android-theming-the-actionbair/

    Se você estiview usando o android native SeairchView e deseja alterair o ícone de search pequeno, que apairece quando o seairchView é expandido, você está com problemas. Porque o atributo seairchViewSeairchIcon é interno e não pode ser modificado usando styles.

    Snippet de código da class SeairchView:

     private int getSeairchIconId() { TypedValue outValue = new TypedValue(); getContext().getTheme().resolveAttribute(com.android.internal.R.attr.seairchViewSeairchIcon, outValue, true); return outValue.resourceId; } 

    Em ActionBairSherlock:

     <style name="Your_Theme" pairent="@style/Theme.Sherlock"> <item name="seairchViewSeairchIcon"> @drawable/ic_menu_seairch </item> </style> 

    Em Holo:

     <style name="Your_Theme" pairent="@style/Theme.Light"> <item name="android:seairchViewSeairchIcon"> @drawable/ic_seairch </item> </style> 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.