我有一个应用程序,它在操作菜单项中有切换按钮,虽然我正在使用Actionbar Sherlock,我不知道,如何在操作菜单项中放置切换按钮。 我不想将其作为自定义布局放置在操作栏中,但我想将其作为菜单项放置。 如果有人find解决方案,请帮帮我。
目的,如果我更改切换按钮的状态,它将基于ALphabets对人进行排序,并在出生日期再次对人进行排序。
提前致谢!
只需将其添加为普通菜单按钮,使用布尔variables检查其状态,并在更改排序模式时更改图标和标题
boolean birthSort=false; @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_toggle: if(birthSort){ //change your view and sort it by Alphabet item.setIcon(icon1) item.setTitle(title1) birthSort=false; }else{ //change your view and sort it by Date of Birth item.setIcon(icon2) item.setTitle(title2) birthSort=true; } return true; } return super.onOptionsItemSelected(item); }
不要忘记像任何其他菜单按钮一样在xml中添加它,并配置android:showAsAction
如果你想在溢出或外部显示它。
其他方法是为ActionBar使用自定义布局:
基本上你定义了一个包含你的Toggle的布局 :
ALTERNATIVE 1:然后在您的Activity或Fragment容器中执行以下操作:
ActionBar actionBar = getSupportActionBar(); actionBar.setCustomView(R.layout.actionbar_top); actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_CUSTOM); ... ToggleButton button = (ToggleButton) findViewById(R.id.actionbar_service_toggle);
请注意,您正在使用真正的ToggleButton,并且您在代码中将其作为真实对象ToggleButton进行处理,与重新实现自己的切换(主题,可靠性,视图层次结构,本机支持…)相比,它具有许多优点。 。
源代码在这里 。
替代方案2:另一种方法是将自定义视图嵌入到常规菜单视图中:
如果像我一样actionLayout不适合你,请尝试app:actionLayout="@layout/actionbar_service_toggle"
而不是android:actionLayout="@layout/actionbar_service_toggle"
以及app:showAsAction="always"
而不是android:showAsAction="always"
这是因为如果使用appCompat,则不会使用android命名空间。
所以这是最终版本:
和
< ?xml version="1.0" encoding="utf-8"?>
在菜单中创建xml文件:
menu.xml文件
然后导航到您的布局文件夹,创建一个新的xml文件并将其命名为switch_layout.xml以下是代码:switch_layout.xml
在MainActivity类中复制并粘贴以下代码:
MainActivity.java
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu, menu); switchAB = (Switch)menu.findItem(R.id.switchId) .getActionView().findViewById(R.id.switchAB);7
或者关注这个东西