1

嗨,我正在开发小型 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>

它没有将该布局文件作为标题视图......我还阅读了这个为 ContextMenu 应用自定义标题

但这对我不起作用..需要帮助谢谢....

4

2 回答 2

4

如果我在设置标题视图后设置标题标题,则不会应用该视图。在 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相同。

谢谢...

于 2013-01-31T06:32:22.200 回答
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();
        }
    ...
}
于 2019-04-28T09:37:59.990 回答