我正在开发小型Android应用程序。在我的应用程序中,我显示一个上下文菜单。 每件事都很好,唯一的问题是我无法将标题视图设置到我的上下文菜单。 我的代码看起来像
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
LayoutInflater headerInflater = (LayoutInflater) getSherlockActivity()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewGroup header = (ViewGroup) headerInflater.inflate(
R.layout.context_menu_header, null);
menu.setHeaderView(header);
menu.setHeaderTitle("Edit Profile Pic");
MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.menu_camera, menu);
}
和我的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/context_menu_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/actionbar"
/>
</LinearLayout>
它没有将该布局文件作为标题视图...我也读了这个Applying a custom header for ContextMenu
但那对我不起作用.. 需要帮助,谢谢....
答案 0 :(得分:3)
如果我在设置标题视图后设置标题标题,则表示不应用该视图。在xml视图中设置标题标题并在应用标题视图时设置标题。喜欢以下方式..
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
LayoutInflater headerInflater = (LayoutInflater) getSherlockActivity()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewGroup header = (ViewGroup) headerInflater.inflate(
R.layout.context_menu_header, null);
// menu.setHeaderView(header);
TextView title = (TextView) header
.findViewById(R.id.header_textView);
title.setText("Edit Profile Pic");
menu.setHeaderView(header);
//menu.setHeaderTitle("Edit Profile Pic");
MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.menu_camera, menu);
}
它会正常工作。与此问题Applying a custom header for ContextMenu相同。
谢谢...
答案 1 :(得分:0)
在Android 8.1中,ContextMenu将创建一个StandardMenuPopup,并且永远不会为您的自定义标题视图调用menu.getHeaderView。这意味着setHeaderView()未使用。
private boolean tryShow() {
...
if (mShowTitle && mMenu.getHeaderTitle() != null) {
FrameLayout titleItemView =
(FrameLayout) LayoutInflater.from(mContext).inflate(
com.android.internal.R.layout.popup_menu_header_item_layout,
listView,
false);
TextView titleView = (TextView) titleItemView.findViewById(
com.android.internal.R.id.title);
if (titleView != null) {
titleView.setText(mMenu.getHeaderTitle());
}
titleItemView.setEnabled(false);
listView.addHeaderView(titleItemView, null, false);
// Update to show the title.
mPopup.show();
}
...
}