我正在使用ActionBarSherlock:
有3个菜单项,其中只有1个具有ActionLayout。
default_menu.xml
<item
android:id="@+id/searchIcon"
android:icon="@drawable/search_icon"
android:actionLayout="@layout/search_icon_actionview"
android:showAsAction="always|collapseActionView"
android:title="Search"/>
<item
android:id="@+id/newIcon"
android:icon="@drawable/new_icon"
android:orderInCategory="0"
android:showAsAction="ifRoom|collapseActionView"
android:title="New"/>
<item
android:id="@+id/notificationIcon"
android:icon="@drawable/notification_icon"
android:orderInCategory="0"
android:showAsAction="ifRoom|collapseActionView"
android:title="Notifications"/>
如果我使用上面的代码。只有前2个图标可见。如果我将始终列为第2和第3,即使在点击搜索时打开 actionLayout ,它们仍会保留。
我想最初显示所有3个菜单项,当点击search_icon时隐藏每个项目。
我对我的实施也有疑问,无论我是以正确的方式做事。
在活动中(有一个viewPager)第一个片段:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.searchIcon:
mEtSearchbar.clearFocus();
(new Handler()).postDelayed(new Runnable() {
public void run() {
mEtSearchbar.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 0, 0, 0));
mEtSearchbar.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
}
}, 100);
return true;
case R.id.newIcon:
return true;
case R.id.notificationIcon:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// TODO Auto-generated method stub
inflater.inflate(R.menu.default_menu, menu);
mSearchbar = (MenuItem) menu.findItem(R.id.searchIcon);
View actionview = mSearchbar.getActionView();
mEtSearchbar = ((EditText) actionview.findViewById(R.id.search_editText));
ImageView searchImage = ((ImageView) actionview.findViewById(R.id.search_image));
searchImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
String s = mEtSearchbar.getText().toString();
Toast.makeText(getSherlockActivity(), "Searching for: " + s, Toast.LENGTH_SHORT)
.show();
}
});
super.onCreateOptionsMenu(menu, inflater);
}
答案 0 :(得分:7)
这是我最终使用的。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.main, menu);
MenuItem searchItem = menu.findItem(R.id.search);
mSearchView = (SearchView) searchItem.getActionView();
setupSearchView(searchItem);
mSearchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// hide action item
if (menu != null) {
menu.findItem(R.id.notifications).setVisible(false);
menu.findItem(R.id.share).setVisible(false);
}
}
});
mSearchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
adapter.getFilter().filter("");
// re-show the action button
if (menu != null) {
menu.findItem(R.id.notifications).setVisible(true);
menu.findItem(R.id.share).setVisible(true);
}
return false;
}
});
return true;
}
private void setupSearchView(MenuItem searchItem) {
//code
}
答案 1 :(得分:2)
我认为您可以在searchView上设置类似的内容:
searchCommand.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
答案 2 :(得分:1)
我不确定,但尝试一次。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.map_menu, menu);
for (int i = 0; i < menu.size(); i++) {
MenuItem item = menu.getItem(i);
if (item.getItemId() == R.id.menu_more) {
itemChooser = item.getActionView();
if (itemChooser != null) {
itemChooser.setOnClickListener(this);
}
}
}
return super.onCreateOptionsMenu(menu);
}