从操作栏中使用的菜单项获取actionview时遇到问题。 我出于兼容性原因使用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”。 由于我找不到访问此edittext以注册事件处理程序的方法,我试图在oncreateoptionsmenu(以及稍后的onOptionsItemSelected)中填充“R.layout.collapsible_edittext”,将结果添加为acitonview。 在我这样做之后我可以访问edittext但是在单击图标后它不再占用我的操作栏中的全宽。
任何提示如何正确访问ActionView?
答案 0 :(得分:2)
EditText布局
<?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;
}