【问题标题】:Android: menuItem.expandActionView() on API level < 14Android:API 级别 < 14 上的 menuItem.expandActionView()
【发布时间】:2013-02-27 14:17:19
【问题描述】:

我正在使用搜索小部件在我的应用程序上实现搜索界面。我确实计划支持任何 API 级别 onKeyDown() 以在用户按下搜索键时展开搜索小部件,并在提交查询文本时将其最小化。

这很容易通过调用来完成:

@Override
public boolean onSearchRequested() {
    if (mSearchMenuItem != null) {
        mSearchMenuItem.expandActionView();
    }
    return false;
}

以及提交查询时:

searchView.setOnQueryTextListener(new OnQueryTextListener() {

        @Override
        public boolean onQueryTextSubmit(String query) {
            //Do nothing, results for the string supplied are already shown.
            //Just collapse search widget
            mSearchMenu.collapseActionView();
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            //do other stuff
             return false;
    });

问题是在 API 级别 14 中引入了折叠和展开。如前所述,我想提供早在 API 级别 11 的支持,但如果不调用新的 API 方法,我无法实现相同的功能.

我试过了:

@Override
public boolean onSearchRequested() {
    searchView.setIconifiedByDefault(false);
    //and also called
    searchView.requestFocusFromTouch();
}

但这根本没有做任何事情(我的意思是如果搜索小部件已经折叠的话,它仍然是折叠的。

由于我保留了对 menuItem 的引用,因此我也尝试了:

@Override
public boolean onSearchRequested() {
    SearchActivity.this.onOptionsItemSelected(mSearchMenuItem);
}

但这也没有做任何事情,我尝试的最后一件事是:

@Override
public boolean onSearchRequested() {
    searchMenu.getActionView().performClick();
    return false;
}

但这也是不行的。

关于我可以做些什么来提供与menuItem.collapseActionView()menuItem.expandActionView() 相同的功能而不必牺牲兼容性的任何想法?

【问题讨论】:

    标签: android search menuitem backwards-compatibility


    【解决方案1】:

    这适用于 API 级别 10,用于扩展 ActionView,例如搜索视图

    MenuItemCompat.expandActionView(mSearchMenuItem);
    

    【讨论】:

      【解决方案2】:

      您可以使用 MenuItemCompat 静态方法。示例:

      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          getMenuInflater().inflate(R.menu.menu_search, menu);
      
          MenuItem menuItem = menu.findItem(R.id.action_search);
          MenuItemCompat.expandActionView(menuItem);
          SearchView searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
          ...
      }
      

      更多信息:http://developer.android.com/reference/android/support/v4/view/MenuItemCompat.html

      【讨论】:

        【解决方案3】:

        您始终可以选择根据当前运行的版本来区分您的解决方案:

        int sdk = android.os.Build.VERSION.SDK_INT;
        if(sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
        // pre honeycomb
        } else {
        // honeycomb and post
        }
        

        我知道这可能不是您正在寻找的东西,但它可能会为您提供一些帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-28
          • 2016-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-17
          相关资源
          最近更新 更多