contextmenu子菜单的自定义标题视图会引发错误

时间:2013-09-25 14:00:07

标签: android android-layout

是否可以为上下文菜单的子菜单添加自定义标题标题?

我写了这个方法来改变子菜单标题的外观(背景绿色和文字颜色白色)

public void setContextMenuHeader(SubMenu menu, String title, int iconId){
    if(menu == null){
        return;
    }
    View vgDialogTitle = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_title, null);
    ((TextView)vgDialogTitle.findViewById(R.id.dialog_title_text)).setText(title);
    ((ImageView)vgDialogTitle.findViewById(R.id.dialog_title_icon)).setImageResource(iconId);
    menu.clearHeader();
    menu.setHeaderView(vgDialogTitle);

}

R.layout.dialog_title

<?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="wrap_content"
    android:background="@color/green"
    android:orientation="horizontal" >
<ImageView
    android:id="@+id/dialog_title_icon"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:background="@android:color/transparent" />
<TextView
    android:id="@+id/dialog_title_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:background="@android:color/transparent"
    android:gravity="center_vertical"
    android:padding="@dimen/dialog_padding"
    android:textColor="@color/white"
    android:textSize="20sp"
    android:textStyle="bold" />
</LinearLayout>

但是当我调用这个方法时,我得到了错误:

  

java.lang.IllegalStateException:指定的子级已有父级。你必须先在孩子的父母身上调用removeView()。

我可以使用相同的布局文件(使用setHeaderView())更改普通上下文菜单的标题外观,但不能更改子菜单

这就是我如何调用方法来尝试更改子菜单的标题:

@Override
public boolean onContextItemSelected(MenuItem item) {
    ContextMenuInfo menuInfo = item.getMenuInfo();
    if (menuInfo != null) {
        AdapterContextMenuInfo acmInfo = (AdapterContextMenuInfo) menuInfo;
        lastCheckedItemPosition = acmInfo.position;
    }
    final FavoriteItem favouriteItem = favouriteAdapter.getItem(lastCheckedItemPosition);
    setContextMenuHeader(item.getSubMenu(), favouriteItem.getName(), R.drawable.ic_tab_favorite);

编辑:我也无法使用style.xml更改标头backbground。如果这个工作会有同样的好处

0 个答案:

没有答案