我已在项目中更新了holoeverywhere版本,因此我不再使用ActionBarSherlock(ABS),而是使用ActionBarCompact(ABC)
我遇到的问题是当使用MenuItemCompat.getActionView(aMenuItem)时,我总是得到一个空值。
我的确切代码是:
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.dashboard_menu, menu);
_itemNotifications = menu.findItem(R.id.notifications);
_containerViewItemNotifications = (LinearLayout) MenuItemCompat.getActionView(_itemNotifications);
_viewItemNotifications = (TextView) _containerViewItemNotifications.findViewById(R.id.ActionViewDashboard);
_containerViewItemNotifications.setOnClickListener(new OnClickListener() {
@SuppressLint("NewApi")
public void onClick(View v) {
if (android.os.Build.VERSION.SDK_INT >= 16) {
_viewItemNotifications.setBackground(getResources().getDrawable(R.drawable.qnotificacion_disbled));
} else {
_viewItemNotifications.setBackgroundDrawable(getResources().getDrawable(R.drawable.qnotificacion_disbled));
}
_viewItemNotifications.setText(R.string.empty);
onOptionsItemSelected(_itemNotifications);
}
});
_itemAnotateResult = menu.findItem(R.id.menu_anotate_result);
return super.onCreateOptionsMenu(menu);
}
其中MenuItemCompat.getActionView(_itemNotifications)始终为空值
我的XML菜单文件是这样的:
<?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/notifications"
android:actionLayout="@layout/actionview_dashboard"
android:title="@string/customize"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_anotate_result"
android:title="@string/anotate"
android:visible="false"
app:showAsAction="ifRoom|withText"/>
</menu>
我怎样才能克服这一点?我试图在android的文档中采用类似于SearchViewItem解释的方法,但没有成功
提前致谢。
答案 0 :(得分:4)
我认为问题在于ABC不支持自定义ActionLayouts。我找到了一个faced a similar problem which he resolved successfully的人。在添加SearchView时,请注意他使用了app:actionViewClass。您可以尝试使用app:actionLayout并查看它是否适合您?