我想在我的一项活动的ActionBar上实现SearchView。我正在使用HoloEverywhere,其中包括新的AppCompat库并将其用作基础。然后,我的Activity扩展了org.holoeverywhere.app.Activity,这是ActionBarActivity的某些版本的扩展。我可以在操作栏上添加图标,看起来我使用的所有设备和模拟器都没问题。这就是搜索操作在Android 2.2模拟器上的样子:
到目前为止一切顺利。当我按下放大镜图标时,行为是Android 4.1.1 Genymotion实例以及Android 2.2模拟器上的预期行为:
但是,在我的Android 2.3.4手机中,这就是我得到的:
动作图标和操作栏标题消失,但那里什么都没有。软键盘打开,就像那里有东西一样,但我看不到它。
这是我的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手机上的外观:
这就是它在Android 4.1.1 Genymotion图像上的外观:
任何人都有提示我如何解决这个问题?我在AppCompat和HoloEverywhere上搜索了很多与SearchView相关的问题,但我找不到让这个Android 2.3.4设备上的搜索字段正常工作的方法。
谢谢!
答案 0 :(得分:0)
我找到了。似乎我用来创建问题的时间就是我需要清醒的一切。
我在onCreateOptionsMenu
方法上添加了这一行:
MenuItemCompat.setShowAsAction(searchItem,
MenuItemCompat.SHOW_AS_ACTION_ALWAYS |
MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
现在,SearchView在所有设备上的工作和外观都相同,但在用户输入之前,所有这些内容中都删除了用于删除内容(如果有)和关闭输入的小X
。要关闭搜索字段并转到正常的ActionBar,您需要使用后退按钮。哦,UX / UI设计师应该忍受它......:P