1

我从操作栏中使用的菜单项获取操作视图时遇到问题。出于兼容性原因,我正在使用 Actionbarsherlock。

我在 onCreateOptionMenu 中使用此代码:

        menu.add("Search")
        .setIcon(R.drawable.ic_search)
        .setActionView(R.layout.collapsible_edittext)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

我设置的 ActionView 只是一个来自 XML 的 EditText,它的宽度将是“fill_parent”。由于我找不到访问此编辑文本以注册事件处理程序的方法,因此我尝试在 oncreateoptionsmenu(以及稍后在 onOptionsItemSelected)中膨胀“R.layout.collapsible_edittext”,并将结果添加为 acitonview。完成此操作后,我可以访问edittext,但在单击图标后它不再占据我的操作栏中的全部宽度。

任何提示如何正确访问 ActionView?

4

1 回答 1

2

编辑文本布局

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:singleLine="true"
          android:hint="Search"/>

代码

 private EditText search;


  private TextWatcher filterTextWatcher = new TextWatcher() {
        public void afterTextChanged(Editable s) {
        }

        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        public void onTextChanged(CharSequence s, int start, int before, int count) {
            //... your logic here    
        }
    };

@Override
    public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
        menu.add(0, 3, 3, R.string.ac_search  ).setIcon(R.drawable.ic_action_search).setActionView(R.layout.action_search).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
        return super.onCreateOptionsMenu(menu);
    }


  @Override
    public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) {
        switch (item.getItemId()){

            case 3:
                search = (EditText) item.getActionView();
                search.addTextChangedListener(filterTextWatcher);
                break;

        }
        return true;
    }
于 2012-08-23T14:01:34.797 回答