操作栏自定义组件(自定义开关)未显示actionLayout

时间:2014-09-17 15:21:55

标签: java android xml android-actionbar

我想在操作栏中进行自定义切换。这是我的菜单xml:

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

<item
    android:id="@+id/actionbar_notification_switch"
    android:title=""
    android:actionLayout="@layout/notification_switch"
   autolux:showAsAction="always"/>
</menu>

这是我的自定义通知开关xml notification_switch.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="wrap_content"
android:orientation="horizontal">
<Switch xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/color"
    android:textOff="OFF"
    android:textOn="ON"
    android:thumb="@drawable/navigation_switch_selector"
    android:checked="false"
    android:id="@+id/actionbar_notification" />

</RelativeLayout>

这就是我从我的活动中所说的:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.notification_menu, menu);
        return true;
    }

但我的操作栏没有显示我的自定义开关(或任何其他组件,如果我把它放在notification_switch.xml中)。此外,我能够将main.xml菜单设置为我的菜单,它只使用一个图标,并且有效。该代码是:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:autolux="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_bar_filter"
        android:icon="@drawable/ic_sort"
        android:title="@string/action_settings"
        autolux:showAsAction="always" />

</menu>

我似乎无法弄清楚我的自定义组件出了什么问题。任何帮助将不胜感激。 (附加信息是:Min Sdk Version 14,Compile Sdk Version 19,Build Tools Version 20

1 个答案:

答案 0 :(得分:1)

我希望它有所帮助:

删除:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.notification_menu, menu);
    return true;
}

然后在onCreate method

 ActionBar mActionBar = getActionBar();
 LayoutInflater mInflater = LayoutInflater.from(this);
 View mCustomView = mInflater.inflate(R.layout.notification_switch, null);
 mActionBar.setCustomView(mCustomView);
 mActionBar.setDisplayShowCustomEnabled(true);

参考:

http://javatechig.com/android/actionbar-with-custom-view-example-in-android

如果您使用actionBarCompat使用getSupportActionBar代替getActionBar