2013-02-19 58 views
19

我有一个应用程序,其中有操作菜单项切换按钮,虽然我使用操作栏Sherlock,我不知道,如何放置操作菜单项中的切换按钮。我不想将其作为自定义布局放置在操作栏中,但我想将其作为菜单项放置。如果有人找到解决方案,请帮助我。是否有可能实施切换按钮在操作菜单中使用操作栏sherlock在android

目的,如果我改变切换按钮的状态,它会根据ALphabets排序人,并再次在出生日期。

在此先感谢!

+0

为什么你不希望使用自定义操作布局? – 2013-02-19 13:06:41

+0

我已经使用了自定义布局的动作栏标题 – RajeshVijayakumar 2013-02-19 13:09:07

+0

您不能在溢出菜单中放置一个“ToggleButton”。但是,溢出菜单可能支持可检查的项目 - 我没有尝试过。 – CommonsWare 2013-02-19 13:12:46

回答

36

只需添加它像一个正常的菜单按钮,用布尔变量检查它的状态,您可以更改图标和标题改变sortmode

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如果你想显示它在溢出或外面。

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:id="@+id/menu_toogle" 
    android:showAsAction="ifRoom" 
    android:title="Share" 
    /> 
</menu> 
+0

此外,您可以从android-sdk文件夹中抓取切换按钮图标 – wutzebaer 2013-07-20 21:40:02

+0

但该视图不是切换按钮,这是正常的 2014-12-05 18:45:07

3

其他的方法是使用自定义布局你的动作条:

基本上你定义一个布局包含您的切换:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <ToggleButton 
    android:id="@+id/actionbar_service_toggle" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textOn="Logging On" 
    android:textOff="Logging Off" /> 
</RelativeLayout> 

选择1: 然后在你的活动片段集装箱你这样做:那你有一个真正的切换按钮,你正在处理它的代码作为一个真正的对象切换按钮,它有很多的优点相比,有你重新实现自己的拨动

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); 

通知(题材,可靠性,视图层次结构,原生支持......)。

源代码here


选择2: 另一种方式来做到这一点是嵌入自定义视图到常规菜单视图:

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item 
     android:id="@+id/myswitch" 
     android:title="" 
     android:showAsAction="always" 
     android:actionLayout="@layout/actionbar_service_toggle" /> 
</menu> 
1

在菜单中创建XML文件:

menu.xml文件

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context="si.ziga.switchinsideab.MainActivity"> 
<item android:id="@+id/switchId" android:title="" android:showasaction="always" android:actionlayout="@layout/switch_layout"> 
    <item android:id="@+id/action_settings" android:orderincategory="100" android:title="@string/action_settings" app:showasaction="never"> 
</item></item></menu> 

然后导航你的布局文件夹中创建一个新的XML文件 并将其命名为switch_layout.xml 下面的代码: switch_layout.xml

<!--?xml version="1.0" encoding="utf-8"?--> 
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="match_parent" android:orientation="horizontal"> 
<switch android:id="@+id/switchAB" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerhorizontal="true" android:layout_centervertical="true"> 
</switch></relativelayout> 

在您的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 

,或点击此link这个东西

2

如果像我一样的actionLayout不为你工作,尝试app:actionLayout="@layout/actionbar_service_toggle"而不是android:actionLayout="@layout/actionbar_service_toggle"以及对app:showAsAction="always"代替android:showAsAction="always" 这是因为如果使用appCompat android命名空间将不会被使用。

因此,这里的最终版本:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <ToggleButton 
    android:id="@+id/actionbar_service_toggle" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textOn="Logging On" 
    android:textOff="Logging Off" /> 
</RelativeLayout> 

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/myswitch" 
     android:title="" 
     app:showAsAction="always" 
     app:actionLayout="@layout/actionbar_service_toggle" /> 
</menu>