使用HoloEverywhere库的SearchView小部件不会在Android 2.3.4上显示

时间:2013-11-15 20:02:13

标签: android android-holo-everywhere

我想在我的一项活动的ActionBar上实现SearchView。我正在使用HoloEverywhere,其中包括新的AppCompat库并将其用作基础。然后,我的Activity扩展了org.holoeverywhere.app.Activity,这是ActionBarActivity的某些版本的扩展。我可以在操作栏上添加图标,看起来我使用的所有设备和模拟器都没问题。这就是搜索操作在Android 2.2模拟器上的样子:

The ActionBar on Android 2.2 before the icon is pressed

到目前为止一切顺利。当我按下放大镜图标时,行为是Android 4.1.1 Genymotion实例以及Android 2.2模拟器上的预期行为:

This is how the search edit text looks like

但是,在我的Android 2.3.4手机中,这就是我得到的:

The action icon disappears, but there is nothing there

动作图标和操作栏标题消失,但那里什么都没有。软键盘打开,就像那里有东西一样,但我看不到它。

这是我的onCreateOptionsMenu方法:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);

        MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
        if (searchView != null) {
           searchView.setOnQueryTextListener(this);
        }

        ) );

        return super.onCreateOptionsMenu(menu);
    }

我调试了一个searchView永远不会null - 这个问题在菜单XML上出现问题时似乎很常见,但事实并非如此。顺便说一句,这就是我的menu.xml的样子:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/activity_main_search"
          android:showAsAction="always"
          android:actionViewClass="android.support.v7.widget.SearchView"
    />
</menu>

由于this,我使用了“android:”命名空间。由于它在Android 2.2模拟器上正常工作,似乎没问题。

另外,另一个奇怪的事情是:如果我添加行

searchView.setIconifiedByDefault(false);
onCreateOptionsMenu方法上

,然后在所有设备/模拟器上生成的“始终打开”字段看起来相同。请参阅,这是非图标化的SearchView在Android 2.3.4手机上的外观:

This is how the non-iconified SearchView looks on the Android 2.3.4 phone

这就是它在Android 4.1.1 Genymotion图像上的外观:

And this is how it looks on the Android 4.1.1 Genymotion image

任何人都有提示我如何解决这个问题?我在AppCompat和HoloEverywhere上搜索了很多与SearchView相关的问题,但我找不到让这个Android 2.3.4设备上的搜索字段正常工作的方法。

谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了。似乎我用来创建问题的时间就是我需要清醒的一切。

我在onCreateOptionsMenu方法上添加了这一行:

    MenuItemCompat.setShowAsAction(searchItem, 
             MenuItemCompat.SHOW_AS_ACTION_ALWAYS | 
             MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

现在,SearchView在所有设备上的工作和外观都相同,但在用户输入之前,所有这些内容中都删除了用于删除内容(如果有)和关闭输入的小X。要关闭搜索字段并转到正常的ActionBar,您需要使用后退按钮。哦,UX / UI设计师应该忍受它......:P