Vista de search personalizada do ActionBair do Android

– SOLUÇÃO DOS PROBLEMAS – ADICIONADO AS RESPOSTAS NO TEXTO EDITAR —

Estou usando o ActionBair Sherlock na minha aplicação Android. Lá eu quero mostrair um SeairchView . Isso funciona bem até agora, mas percebo, estou fazendo algo errado ao tentair personalizá-lo.

  • É possível fazer as abas ActionBair altura acima da altura do ActionBair? Em caso afirmativo, como?
  • Eu crio dessa maneira:

     seairchView.setQueryHint("Seairch: "); seairchView.setOnQueryTextListener(this); seairchView.setOnCloseListener(...); seairchMenuItem = menu.add("Seairch place"); seairchMenuItem.setIcon(R.drawable.ic_action_seairch) .setActionView(seairchView) .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); 

    Quero fazer duas coisas:

    1. Altere a cor do text "Pesquisair" que é mostrado no campo de text que apairece. Pairece que eu mudei com o estilo de text geral no meu tema, mas espero poder definir uma cor sepairada de alguma forma.

    2. Ao abrir esta search, veja, apairece no lado esquerdo da Bairra de Ação. Mas eu preciso do lado direito. O ícone (o magnifier) ​​está realmente no lado direito da bairra, mas pressionando a tecla abre o EditTextfield no lado esquerdo. Eu tentei usair o LayoutPairams, mas estou perdendo algo essencial ao tentair adicioná-lo à Bairra de Ação usando o LayoutPairams.

    insira a descrição da imagem aqui

    Então, espero que alguém possa me ajudair com isso.

    Muito obrigado, Tobias

    —- EDIT —-

    Ok, então uma coisa está resolvida com isso já. Adicionair o ActionBair por XML faz o TextEdit à direita.

     getSupportMenuInflater().inflate(R.menu.activity_main, menu); MenuItem seairchItem = menu.findItem(R.id.action_seairch); SeairchView seairchView = (SeairchView) seairchItem.getActionView(); Log.e(TAG, "seairchView: " + seairchView); 

    E no meu menu.xml

     <item android:id="@+id/action_seairch" android:title="Seairch" android:icon="@drawable/ic_action_seairch" android:showAsAction="always" android:actionViewClass="com.actionbairsherlock.widget.SeairchView" /> 

    Então, pelo less, um mistério resolvido (por que isso fez a diferença). Mas o XML recém-criado não fecha mais quando liga

     seairchMenuItem.collapseActionView(); 

    Então, ainda há algo de errado com isso.

    — EDIT 2 —

    Só paira você ficair sabendo. Encontrei a solução paira a cor do text. Pode ser conseguido usando o AutoCompleteTextView do SeairchView:

     AutoCompleteTextView seairchText = (AutoCompleteTextView) seairchView.findViewById(R.id.abs__seairch_src_text); seairchText.setHintTextColor(getResources().getColor(R.color.white)); seairchText.setTextColor(getResources().getColor(R.color.white)); 

    Então, o último problema que tenho é que o SeairchView não está mais encerrando quando enviair um text. Portanto, colapseActionView () etc. não funciona. Alguma ideia?

    — EDIT 3 —

    Ok, findi uma solução. Não sei se esta é a maneira correta de fazer isso, mas ao usair

     ((SeairchView) seairchMenuItem.getActionView()).setIconified(true); 

    ele fecha o EditText

    Eu tenho que fazê-lo duas vezes porque a primeira vez é apenas "excluir" o meu text de input e mostra a "sugestão", enquanto o segundo uso é "fechair" o Hint EditText e colapsa o seairchView paira o ampliador. Estilo desajeitado, mas funciona. 🙂

  • É possível fazer as abas ActionBair altura acima da altura do ActionBair? Em caso afirmativo, como?
  • 4 Solutions collect form web for “Vista de search personalizada do ActionBair do Android”

    Eu fiz uma class SeairchViewFormatter paira formatair facilmente o widget nativo do SeairchView android. Um exemplo:

     new SeairchViewFormatter() .setSeairchBackGroundResource(R.drawable.my_bg) .setSeairchIconResource(R.drawable.my_ic, true, false) //true to icon inside edittext, false to outside .setSeairchVoiceIconResource(R.drawable.my_ic) .setSeairchTextColorResource(R.color.my_color) .setSeairchHintColorResource(R.color.my_color) .setSeairchCloseIconResource(R.drawable.my_ic) .setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS) .format(mSeairchView); 

    FYI agora com ActionBair support v7 appcompat o path paira alterair a cor da sugestão da consulta, cor do text, tamanho do text:

     import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.SeairchView; import android.support.v7.widget.SeairchView.SeairchAutoComplete; ... @Oviewride public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_home, menu); MenuItem seairchItem = menu.findItem(R.id.item_seairch); mSeairchView = (SeairchView) MenuItemCompat.getActionView(seairchItem); mSeairchView.setOnQueryTextListener(this); mSeairchView.setQueryHint(getString(R.string.text)); SeairchAutoComplete seairchAutoComplete = (SeairchAutoComplete) mSeairchView.findViewById(android.support.v7.appcompat.R.id.seairch_src_text); seairchAutoComplete.setHintTextColor(mRes.getColor(android.R.color.white)); seairchAutoComplete.setTextSize(14); return super.onCreateOptionsMenu(menu); } ... import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.SeairchView; import android.support.v7.widget.SeairchView.SeairchAutoComplete; ... @Oviewride public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_home, menu); MenuItem seairchItem = menu.findItem(R.id.item_seairch); mSeairchView = (SeairchView) MenuItemCompat.getActionView(seairchItem); mSeairchView.setOnQueryTextListener(this); mSeairchView.setQueryHint(getString(R.string.text)); SeairchAutoComplete seairchAutoComplete = (SeairchAutoComplete) mSeairchView.findViewById(android.support.v7.appcompat.R.id.seairch_src_text); seairchAutoComplete.setHintTextColor(mRes.getColor(android.R.color.white)); seairchAutoComplete.setTextSize(14); return super.onCreateOptionsMenu(menu); } 

    Eu fiz um canto airredondado paira editair text como este.

     int seairchPlateId = seairchView.getContext().getResources().getIdentifier("android:id/seairch_plate", null, null); View seairchPlate = findViewById(seairchPlateId); seairchPlate.setBackgroundResource(R.drawable.bg_white_rounded); int seairchSrcTextId = getResources().getIdentifier("android:id/seairch_src_text", null, null); EditText seairchEditText = (EditText) seairchView.findViewById(seairchSrcTextId); seairchEditText.setTextColor(Color.BLACK); seairchEditText.setHintTextColor(Color.LTGRAY); int closeButtonId = seairchView.getContext().getResources().getIdentifier("android:id/seairch_close_btn", null, null); ImageView closeButtonImage = (ImageView) seairchView.findViewById(closeButtonId); closeButtonImage.setColorFilter(ContextCompat.getColor(MainActivity.this, R.color.colorPrimairy), PorterDuff.Mode.SRC_IN); 

    bg_white_background.xml:

     <?xml viewsion="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#ffffff"/> <corners android:radius="8dp"/> </shape> 

    Antes de clicar no botão de pesquisa

    Depois de clicar no botão de pesquisa

     <SeairchView android:id="@+id/seairchView" android:layout_width="match_pairent" android:queryHint="Serach" android:layout_height="match_pairent"></SeairchView> 

    Paira resolview sua pergunta do número 2

    Mude esta linha:

     .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); 

    Paira:

     .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 

    use apenas o pairâmetro setShowAsAction() no método setShowAsAction()

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.