android-actionbar - 打开 ActionLayout 时隐藏菜单项

标签 android-actionbar actionbarsherlock menuitem actionview

我正在使用 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"/>

如果我使用上面的代码。只有 1st 2 个图标可见。如果我将第二个和第三个设为 永远 即使在 时它们仍然存在 Action 布局单击 时打开搜索 .

我想最初显示所有 3 个菜单项,并在单击 search_icon 时隐藏每个项。

我也对我的实现有疑问,我是否以正确的方式做我。

在 Activity(有一个 viewPager)的第一个 Fragment 中:
@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);
}

最佳答案

这就是我最终使用的。

 @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
}

关于android-actionbar - 打开 ActionLayout 时隐藏菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13668010/

相关文章:

android - 在 Android 悬停时设置菜单项背景颜色

java - 淡入/淡出 Android ActionBar

css - 带有 FXML 的 JavaFX 更改 css 文件运行时,带有菜单项

javascript - 如何根据用户在angularjs中的角色显示不同的菜单项?

android - 模拟器显示操作栏溢出图标和菜单 bt 电话不显示它

Android隐藏ActionBar

android - 使用ActionBarSherlock时ActionBar下的阴影

android - 在 ActionBarSherlock 中按下刷新按钮时如何显示不确定的进度条?

android - 如何强制使用溢出菜单而不是 native 菜单?

android - MenuItem 的两行文本