Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
251 views
in Technique[技术] by (71.8m points)

android - SearchView taking all the space in the new ActionBarCompat

I switched from ActionBarSherlock to ActionBarCompat (support library v7). After some adjustments, almost everything is working fine by now.

But I'm in trouble with the SearchView in the ActionBar. When it's expanded (actually, It's always expanded in my Activity), it takes up all the space and doesn't respect the space of other Action Items that are set to show always (showAsAction="always").

To simulate the problem, use this:

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

    <item
        android:id="@+id/menu_buscar"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:icon="@drawable/abc_ic_search"
        app:showAsAction="always"
        android:title="@string/buscar"/>

    <item android:id="@+id/tentar_novamente"
          android:title="@string/tentar_novamente"
          android:icon="@drawable/acao_tentar_novamente"
          app:showAsAction="always" />

</menu>

In the Activity:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.busca_action_menu, menu);

    searchMenuItem = menu.findItem(R.id.menu_buscar);
    searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem);

    searchView.setIconifiedByDefault(false);
    searchView.setQueryHint(stringBusqueArtistasMusicasEAlbuns);

    return super.onCreateOptionsMenu(menu);
}

This is the result in the android 4.3:

enter image description here

And this is the result in the android 2.3 (the action items doesn't even appear):

enter image description here

The same problem happens when I use:

setSupportProgressBarIndeterminateVisibility(true);

The progress indicator appears very strange in the Android 4.3 and doesn't appear in Android 2.3.

The same code worked as expected with ActionBarSherlock. When there was some action item, the SearchView used to decrease its width to give space for the action items.

UPDATE:

I've posted an issue in the Android's Bug Tracker: https://code.google.com/p/android/issues/detail?id=58251&thanks=58251&ts=1375191632

If you have the same problem, please follow the issue.

UPDATE:

I've tried to put the action items before the SearchView and this way they items appear.

enter image description here

But, the setSupportProgressBarIndeterminateVisibility(true) is still not showing the progress bar.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This is definitely a bug about Android but a workaround can be including SearchView programmatically like this:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());
    searchView.setIconifiedByDefault(false);
    getActionBar().setCustomView(searchView);
    getActionBar().setDisplayShowCustomEnabled(true);
}

You can also use a layout XML to define SearchView properties. However "iconifiedByDefault" in XML tends to be ineffective in my experience. (This may my bad though)

Thanks for creating an issue about this. Here's the URL to the related bug report: https://code.google.com/p/android/issues/detail?id=58251

Despite what is mentioned in the bug report, my experience was the same with both ActionBarSherlock and ActionBarCompat. So I expect that ActionBarSherlock users are also affected.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

56.9k users

...