Android 操作栏与搜索视图

13

我想做一个看起来像这样的操作栏:

ActionBar

但是我不知道怎么做。

我尝试使用这里描述的折叠功能,但它并不完全符合我的要求。

  • 首先,SearchView在用户点击搜索图标之前是不可见的...但我希望它在活动启动后立即可见。
  • 其次,在SearchView出现后,所有其他操作图标都会消失...但我希望它们一直可见。
  • 它只适用于Android 3及更高版本,但是我想要它适用于Android 2及更高版本,因此我正在使用ActionBarSherlock。

例如,Google地图中的操作栏类似于我想要的。

有人能建议我如何实现吗?


这是我认为的Google地图操作栏[Google Maps](http://vojtechbartos.com/mapyactionbar.png) - Vojtěch Bartoš
你想做的是将自定义视图添加到你的操作栏中。 API 参考链接:http://developer.android.com/reference/android/app/ActionBar.html#setCustomView(int)然后像这样调用它: getActionbar.setCustomView(R.layout.mySearchbar); - andreasg
2
谢谢!:) 我按照您说的做了,创建了一个名为search_bar.xml的布局文件,并在其中添加了一个EditText。然后我在活动的onCreate方法中编写了以下代码:actionBar = getSupportActionBar(); actionBar.setCustomView(R.layout.search_bar); actionBar.setDisplayShowCustomEnabled(true);,它起作用了!所以...真的非常感谢您!:) - Vojtěch Bartoš
2个回答

14

ActionbarSherlock 是一个很棒的库。最新版本(4.2.0)有一个方法可以在活动开始时使搜索视图可见:SearchView.setIconified(boolean);

因此,如果您想使搜索视图始终可见,应该使用以下代码:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    //Create the search view
    SearchView searchView = new SearchView(getSherlockActivity().getSupportActionBar().getThemedContext());
    searchView.setQueryHint("Search for countries…");
    searchView.setIconified(false);

    menu.add("Search")
            .setIcon(R.drawable.abs__ic_search)
            .setActionView(searchView)
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);


}

6
如果您正在使用ActionBarSherlock,您需要执行以下操作:
 @Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
    menu.add(0, 1, 1, R.string.ac_refresh ).setIcon(R.drawable.ic_navigation_refresh).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
    menu.add(0, 2, 2, R.string.ac_settings).setIcon(R.drawable.ic_action_settings).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
    menu.add(0, 3, 3, R.string.ac_favourite).setIcon(isFavouriteChannel(channel) ? R.drawable.ic_rating_important : R.drawable.ic_rating_not_important).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
    menu.add(0, 4, 4,  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);
}

请看setActionView(R.layout.action_search) - 这是你在xml文件中的文本视图。如果你想让其他操作图标始终出现,你应该使用MenuItem.SHOW_AS_ACTION_ALWAYS


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接