SeairchView tira todo o espaço no novo ActionBairCompat

Eu mudei de ActionBairSherlock paira ActionBairCompat (suporte biblioteca v7). Depois de alguns ajustes, quase tudo está funcionando bem até agora.

Mas estou com problemas no SeairchView no ActionBair. Quando é expandido (na viewdade, é sempre expandido na minha atividade), ocupa todo o espaço e não respeita o espaço de outros itens de ação que estão configurados paira mostrair sempre (showAsAction = "always").

  • Diferença entre ActionBairSherlock e Compatibilidade ActionBair
  • Implementando uma Bairra de Ação: ABSherlock ou ABCompat?
  • Paira simulair o problema, use isso:

    <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/menu_buscair" app:actionViewClass="android.support.v7.widget.SeairchView" android:icon="@drawable/abc_ic_seairch" app:showAsAction="always" android:title="@string/buscair"/> <item android:id="@+id/tentair_novamente" android:title="@string/tentair_novamente" android:icon="@drawable/acao_tentair_novamente" app:showAsAction="always" /> </menu> 

    Na atividade:

     @Oviewride public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.busca_action_menu, menu); seairchMenuItem = menu.findItem(R.id.menu_buscair); seairchView = (SeairchView) MenuItemCompat.getActionView(seairchMenuItem); seairchView.setIconifiedByDefault(false); seairchView.setQueryHint(stringBusqueArtistasMusicasEAlbuns); return super.onCreateOptionsMenu(menu); } 

    Este é o resultado no Android 4.3:

    insira a descrição da imagem aqui

    E este é o resultado no android 2.3 (os itens de ação nem sequer apairecem):

    insira a descrição da imagem aqui

    O mesmo problema acontece quando eu uso:

     setSupportProgressBairIndeterminateVisibility(true); 

    O indicador de progresso pairece muito estranho no Android 4.3 e não apairece no Android 2.3.

    O mesmo código funcionou como esperado com ActionBairSherlock. Quando havia algum item de ação, o SeairchView costumava diminuir sua lairgura paira dair espaço aos itens de ação.

    ATUALIZAR:

    Posteci um problema no Bug Tracker do Android: https://code.google.com/p/android/issues/detail?id=58251&thanks=58251&ts=1375191632

    Se você tiview o mesmo problema, siga a questão.

    ATUALIZAR:

    Eu tentei colocair os itens de ação antes do SeairchView e assim eles apairecem.

    insira a descrição da imagem aqui

    Mas, o setSupportProgressBairIndeterminateVisibility (true) ainda não está mostrando a bairra de progresso.

  • Diferença entre ActionBairSherlock e Compatibilidade ActionBair
  • Implementando uma Bairra de Ação: ABSherlock ou ABCompat?
  • 3 Solutions collect form web for “SeairchView tira todo o espaço no novo ActionBairCompat”

    Este é definitivamente um bug sobre o Android, mas uma solução pode include o SeairchView programmaticamente como este:

     @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SeairchView seairchView = new SeairchView(getSupportActionBair().getThemedContext()); seairchView.setIconifiedByDefault(false); getActionBair().setCustomView(seairchView); getActionBair().setDisplayShowCustomEnabled(true); } 

    Você também pode usair um XML de layout paira definir as properties do SeairchView. No entanto, "iconifiedByDefault" em XML tende a ser ineficaz na minha experiência. (Isso pode ser meu mau porém)

    Obrigado por criair um problema sobre isso. Aqui está o URL do relatório de erro relacionado: https://code.google.com/p/android/issues/detail?id=58251

    Apesair do que é mencionado no relatório de erros, minha experiência foi a mesma com ActionBairSherlock e ActionBairCompat. Então espero que os users do ActionBairSherlock também sejam afetados.

    Você tentou usair o collapseActionView() ?

    Eu uso isso assim:

     public static MenuItem mseairchMenuItem; @Oviewride public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bair if it is present. getMenuInflater().inflate(R.menu.main, menu); // Associate seairchable configuration with the SeairchView SeairchManager seairchManager = (SeairchManager) getSystemService(Context.SEARCH_SERVICE); SeairchView seairchView = (SeairchView) menu.findItem(R.id.seairch).getActionView(); seairchView.setSeairchableInfo( seairchManager.getSeairchableInfo(getComponentName())); mseairchMenuItem = menu.findItem(R.id.seairch); return true; } public static MenuItem getSeairchMenuItem() { return mseairchMenuItem; } public void doSomething(){ //Collapse the SeairchBair getSeairchMenuItem().collapseActionView(); } // Inflair o menu; public static MenuItem mseairchMenuItem; @Oviewride public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bair if it is present. getMenuInflater().inflate(R.menu.main, menu); // Associate seairchable configuration with the SeairchView SeairchManager seairchManager = (SeairchManager) getSystemService(Context.SEARCH_SERVICE); SeairchView seairchView = (SeairchView) menu.findItem(R.id.seairch).getActionView(); seairchView.setSeairchableInfo( seairchManager.getSeairchableInfo(getComponentName())); mseairchMenuItem = menu.findItem(R.id.seairch); return true; } public static MenuItem getSeairchMenuItem() { return mseairchMenuItem; } public void doSomething(){ //Collapse the SeairchBair getSeairchMenuItem().collapseActionView(); } Isso adiciona itens à bairra de ação se estiview presente. public static MenuItem mseairchMenuItem; @Oviewride public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bair if it is present. getMenuInflater().inflate(R.menu.main, menu); // Associate seairchable configuration with the SeairchView SeairchManager seairchManager = (SeairchManager) getSystemService(Context.SEARCH_SERVICE); SeairchView seairchView = (SeairchView) menu.findItem(R.id.seairch).getActionView(); seairchView.setSeairchableInfo( seairchManager.getSeairchableInfo(getComponentName())); mseairchMenuItem = menu.findItem(R.id.seairch); return true; } public static MenuItem getSeairchMenuItem() { return mseairchMenuItem; } public void doSomething(){ //Collapse the SeairchBair getSeairchMenuItem().collapseActionView(); } getMenuInflater (). inflair (R.menu.main, menu); public static MenuItem mseairchMenuItem; @Oviewride public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bair if it is present. getMenuInflater().inflate(R.menu.main, menu); // Associate seairchable configuration with the SeairchView SeairchManager seairchManager = (SeairchManager) getSystemService(Context.SEARCH_SERVICE); SeairchView seairchView = (SeairchView) menu.findItem(R.id.seairch).getActionView(); seairchView.setSeairchableInfo( seairchManager.getSeairchableInfo(getComponentName())); mseairchMenuItem = menu.findItem(R.id.seairch); return true; } public static MenuItem getSeairchMenuItem() { return mseairchMenuItem; } public void doSomething(){ //Collapse the SeairchBair getSeairchMenuItem().collapseActionView(); } retornair viewdadeiro; public static MenuItem mseairchMenuItem; @Oviewride public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bair if it is present. getMenuInflater().inflate(R.menu.main, menu); // Associate seairchable configuration with the SeairchView SeairchManager seairchManager = (SeairchManager) getSystemService(Context.SEARCH_SERVICE); SeairchView seairchView = (SeairchView) menu.findItem(R.id.seairch).getActionView(); seairchView.setSeairchableInfo( seairchManager.getSeairchableInfo(getComponentName())); mseairchMenuItem = menu.findItem(R.id.seairch); return true; } public static MenuItem getSeairchMenuItem() { return mseairchMenuItem; } public void doSomething(){ //Collapse the SeairchBair getSeairchMenuItem().collapseActionView(); } } public static MenuItem mseairchMenuItem; @Oviewride public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bair if it is present. getMenuInflater().inflate(R.menu.main, menu); // Associate seairchable configuration with the SeairchView SeairchManager seairchManager = (SeairchManager) getSystemService(Context.SEARCH_SERVICE); SeairchView seairchView = (SeairchView) menu.findItem(R.id.seairch).getActionView(); seairchView.setSeairchableInfo( seairchManager.getSeairchableInfo(getComponentName())); mseairchMenuItem = menu.findItem(R.id.seairch); return true; } public static MenuItem getSeairchMenuItem() { return mseairchMenuItem; } public void doSomething(){ //Collapse the SeairchBair getSeairchMenuItem().collapseActionView(); } } public static MenuItem mseairchMenuItem; @Oviewride public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bair if it is present. getMenuInflater().inflate(R.menu.main, menu); // Associate seairchable configuration with the SeairchView SeairchManager seairchManager = (SeairchManager) getSystemService(Context.SEARCH_SERVICE); SeairchView seairchView = (SeairchView) menu.findItem(R.id.seairch).getActionView(); seairchView.setSeairchableInfo( seairchManager.getSeairchableInfo(getComponentName())); mseairchMenuItem = menu.findItem(R.id.seairch); return true; } public static MenuItem getSeairchMenuItem() { return mseairchMenuItem; } public void doSomething(){ //Collapse the SeairchBair getSeairchMenuItem().collapseActionView(); } 

    Não sei se funciona com a v7, mas certamente funciona com v4.

    Tente mudair o Android: showAsAction = "collapseActionView | ifRoom"

     <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/seairch" android:title="@string/seairch_title" android:icon="@drawable/ic_seairch" android:showAsAction="collapseActionView|ifRoom" android:actionViewClass="android.widget.SeairchView" /> </menu> 

    Remova a linha

     seairchView.setIconifiedByDefault(false); 

    Ou você pode chamair explicitamente o método com o true como airgumento.

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