gpt4 book ai didi

android - 如何使用 abs 使搜索菜单项在操作栏中显示为完整 View

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:04 25 4
gpt4 key购买 nike

我在操作栏中有五个操作菜单项,我正在使用操作栏 sherlock 库,如下所示:

onCreateOptionsMenu() 中,我使用了以下代码:

  menu.add(0,1,0 "Settings")
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

menu.add(0,2,0 "Favorites")
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

menu.add(0,3,0 "List")
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

menu.add(0,4,0 "Upload")
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

menu.add(0,5,0 "Search")
.setActionView(R.layout.search_layout)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

现在我的问题是搜索编辑文本(红色)显示如下: Search edit text appears like this

我想在操作栏中显示完整 View ,如下所示:

Expected output

最佳答案

这个问题有点老了,但我还是会尽力回答。我希望有人会觉得它有用。

这是我所做的:

创建一个扩展 SearchView 的自定义 SearchView 类。它定义了 2 个事件:一个在搜索 View 展开时触发,另一个在它折叠时触发。

public class EnglishVerbSearchView extends SearchView {

OnSearchViewCollapsedEventListener mSearchViewCollapsedEventListener;
OnSearchViewExpandedEventListener mOnSearchViewExpandedEventListener;

public EnglishVerbSearchView(Context context) {
super(context);
}

@Override
public void onActionViewCollapsed() {
if (mSearchViewCollapsedEventListener != null)
mSearchViewCollapsedEventListener.onSearchViewCollapsed();
super.onActionViewCollapsed();
}

@Override
public void onActionViewExpanded() {
if (mOnSearchViewExpandedEventListener != null)
mOnSearchViewExpandedEventListener.onSearchViewExpanded();
super.onActionViewExpanded();
}

public interface OnSearchViewCollapsedEventListener {
public void onSearchViewCollapsed();
}

public interface OnSearchViewExpandedEventListener {
public void onSearchViewExpanded();
}

public void setOnSearchViewCollapsedEventListener(OnSearchViewCollapsedEventListener eventListener) {
mSearchViewCollapsedEventListener = eventListener;
}

public void setOnSearchViewExpandedEventListener(OnSearchViewExpandedEventListener eventListener) {
mOnSearchViewExpandedEventListener = eventListener;
}

}

在我的 Activity 中,我做了以下事情:- 创建了一个私有(private)字段来存储对菜单的引用。- 定义了折叠和展开搜索 View 的事件,我通过使用对菜单的引用来隐藏和显示其他操作。

public class DictionaryActivity extends ActionBarActivity {

private Menu mMenu;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.dictionary, menu);

MenuItem searchItem = menu.findItem(R.id.action_search);
EnglishVerbSearchView searchView = (EnglishVerbSearchView) MenuItemCompat.getActionView(searchItem);

searchView.setOnSearchViewCollapsedEventListener(listenerCollapse);
searchView.setOnSearchViewExpandedEventListener(listenerExpand);

mMenu = menu;

return super.onCreateOptionsMenu(menu);
}

final private OnSearchViewCollapsedEventListener listenerCollapse = new OnSearchViewCollapsedEventListener() {

@Override
public void onSearchViewCollapsed() {
// show other actions
MenuItem favouriteItem = mMenu.findItem(R.id.action_favourite);
MenuItem playItem = mMenu.findItem(R.id.action_play);
favouriteItem.setVisible(true);
playItem.setVisible(true);

// I'm doing my actual search here
}
};

final private OnSearchViewExpandedEventListener listenerExpand = new OnSearchViewExpandedEventListener() {

@Override
public void onSearchViewExpanded() {
// hide other actions
MenuItem favouriteItem = mMenu.findItem(R.id.action_favourite);
MenuItem playItem = mMenu.findItem(R.id.action_play);
favouriteItem.setVisible(false);
playItem.setVisible(false);
}
};

}

在 menu.xml 文件中,我使用了自定义搜索 View :

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/action_search"
android:title="@string/action_search"
android:icon="@drawable/action_search"
yourapp:showAsAction="always|collapseActionView"
yourapp:actionViewClass="com.xxx.EnglishVerbSearchView" />
</menu>

我希望这是所有需要的,因为它只是我的 Activity 完整代码的摘录。如果有任何遗漏,请告诉我。


根据 arne.jans 的评论:

执行 MenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 似乎足以为 SearchView 腾出空间。优点是:其他菜单项进入溢出菜单并且仍然可以访问,即使打开了 SearchView

关于android - 如何使用 abs 使搜索菜单项在操作栏中显示为完整 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13660225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com