Android MenuItem 自定义布局

标签 android layout menuitem

我有一个 PopupMenu当我单击操作栏中的操作按钮时出现。 我希望我的 PopupMenu 中的 MenuItem 具有这样的自定义布局:

布局/menu_item_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/menuItemLayout"

    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/imageViewMenuItem"
        android:layout_width="20dip"
        android:layout_height="20dip"
        android:src="@drawable/abc_list_focused_holo" />

    <TextView
        android:id="@+id/textViewMenuItem"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextViewMenuItem" />

</LinearLayout>

这是 PopUpMenu 的 xml:

菜单/pop_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools"
       tools:context="apparound.actiobarpopupstylefacebook.Main" >

    <item
        android:id="@+id/popupItem"
        android:showAsAction="ifRoom"/>
</menu>

在我的 Activity 代码如下:

public void showPopup(int idR){
View menuItemView = findViewById(idR);
PopupMenu popup = new PopupMenu(this, menuItemView);
MenuInflater inflate = popup.getMenuInflater();
inflate.inflate(R.menu.pop_menu, popup.getMenu());
MenuItem menuItem= popup.getMenu().findItem(R.id.popupItem);
menuItem.setActionView(R.layout.menu_item_layout);
popup.show();
}

但是当出现弹出菜单时,项目是空的。 使用 setActionview() 方法我错了吗? 谢谢。

最佳答案

对于不能使用菜单的自定义布局,一个替代选项是 PopupWindow

PopupWindow popupwindow_obj = popupDisplay();
popupwindow_obj.showAsDropDown(clickbtn, -40, 18); // where u want show on view click event popupwindow.showAsDropDown(view, x, y);

public PopupWindow popupDisplay() 
{ 

    final PopupWindow popupWindow = new PopupWindow(this);

    // inflate your layout or dynamically add view
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View view = inflater.inflate(R.layout.mylayout, null);

    Button item = (Button) view.findViewById(R.id.button1);

    popupWindow.setFocusable(true);
    popupWindow.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
    popupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
    popupWindow.setContentView(view);

    return popupWindow;
}

在名为 my layout.xml 的 res/layout 文件夹中创建此 XML 文件

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Window test" />
</LinearLayout>

关于Android MenuItem 自定义布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23538929/

相关文章:

java - 如何使用 json 文件显示自动完成字段的建议?

android - 如何从谷歌云或设备读取歌曲

layout - 如何在产品 View 页面显示类别自定义设计布局?

Python Selenium从 "menuitem"中选择 "menubar"

android - 创建不同屏幕布局的最佳实践

java - : Landroidx/work/impl/utils/futures/AbstractFuture 解析失败

ios - Swift 中两个元素之间的自动前导空格

android - 导致 App 崩溃的布局

android - 在 Android 中动态启用/禁用菜单项

c - GTK3 更新菜单栏和菜单项