Android 如何在actionbar中重置图标
我在android程序的ActionBar中添加了一个EditText元素。单击图标时,将显示EditText元素,并在按下return或enter键时输入和捕获数据。如何使EditText元素消失并重新显示图标?当前,EditText字段保留在ActionBar中,图标被隐藏。下面是我的菜单xml文件。感谢您的帮助Android 如何在actionbar中重置图标,android,android-actionbar,Android,Android Actionbar,我在android程序的ActionBar中添加了一个EditText元素。单击图标时,将显示EditText元素,并在按下return或enter键时输入和捕获数据。如何使EditText元素消失并重新显示图标?当前,EditText字段保留在ActionBar中,图标被隐藏。下面是我的菜单xml文件。感谢您的帮助 <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_settings"/>
<item
android:id="@+id/herbsearch"
android:title="HerbSearch"
android:showAsAction="always"
android:icon="@android:drawable/ic_menu_search"
/>
<item
android:id="@+id/locationchange"
android:title="Change Location"
android:showAsAction="ifRoom|collapseActionView"
android:icon="@drawable/ic_launcher"
android:actionLayout="@layout/search_layout"
/>
试试这个:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
final MenuItem locationItem = menu.findItem(R.id.locationchange);
View v = (View) locationItem.getActionView();
EditText locSearch = (EditText) v.findViewById(R.id.txt_search);
locSearch.requestFocus();
locSearch.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH || (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
locationItem.collapseActionView();
return true;
}
return false;
}
});
}
我添加了行final MenuItem locationItem=menu.findItem(R.id.locationchange);要检索位置更改菜单项,我调用locationItem.collapseActionView();取消“操作”视图/搜索视图。太好了!谢谢你的建议。我插入了最终的MenuItem locationItem=menu.findItem(R.id.locationchange);onCreateOptions菜单方法中的指令,但只是添加了location.Item.collapseActionView();指令,然后在OnEditorActionListener方法中调用GetMap。如果我为最后一条评论而输入itSorry,那就错了。重复-谢谢你的建议。我在调用GetMap()后插入了您的例程,它的工作方式与我所希望的一样。我知道我必须调用collapseActionView,但我不知道如何获取菜单项,因为我还是个新手。你们在Stack Overflow救了我的命不客气。那么把答案标为正确怎么样?;-)如果你认为我的答案是正确的,那么请接受我的答案。非常感谢。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
/** Get the action view of the menu item whose id is search */
View v = (View) menu.findItem(R.id.locationchange).getActionView();
/** Get the edit text from the action view */
EditText locSearch = ( EditText ) v.findViewById(R.id.txt_search);
locSearch.requestFocus();
/** Setting an action listener */
locSearch.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
// Toast.makeText(getBaseContext(), "Search : " + v.getText(), Toast.LENGTH_SHORT).show();
GetMap(String.valueOf(v.getText()));
invalidateOptionsMenu();
/** Get the edit text from the action view */
EditText locSearch = ( EditText ) v.findViewById(R.id.txt_search);
// I tried these next 3 instructions with no success
// locSearch.setVisibility(1);
// v.setTextColor(Color.WHITE);
// v.setVisibility(1);
return false;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
final MenuItem locationItem = menu.findItem(R.id.locationchange);
View v = (View) locationItem.getActionView();
EditText locSearch = (EditText) v.findViewById(R.id.txt_search);
locSearch.requestFocus();
locSearch.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH || (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
locationItem.collapseActionView();
return true;
}
return false;
}
});
}