The GenericDropdownMenu is a generic implementation of a dropdown menu that you can use in both Editor UI and runtime UI.
The following example creates a dropdown menu with three items. It displays the menu when the user clicks the button. The example also demonstrates how to set
the width of the dropdown menu with the DropDown
method.
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
public class MenuExample : EditorWindow
{
[MenuItem("Window/UI Toolkit/MenuExample")]
public static void ShowExample()
{
MenuExample wnd = GetWindow<MenuExample>();
wnd.titleContent = new GUIContent("MenuExample");
}
public void CreateGUI()
{
VisualElement root = rootVisualElement;
// Create a button.
var button = new Button();
button.text = "Button";
button.style.width = 70;
// Create a dropdown menu with three items.
var menu = new GenericDropdownMenu();
menu.AddItem("Item 1", false, a => { Debug.Log("Item 1 was selected"); }, null);
menu.AddItem("Item 2", false, a => { Debug.Log("Item 2 was selected"); }, null);
menu.AddItem("Item 3 has a very very long label", false, a => { Debug.Log("Item 3 was selected"); }, null);
// When the button is clicked, the dropdown menu is displayed aligned with the button's world boundaries.
button.clicked += () =>
{
// The third and the fourth parameters of the DropDown set the width of the dropdown menu.
// This sets the width of the dropdown menu to the width of the container.
menu.DropDown(button.worldBound, button, false);
// This sets the width of the dropdown menu to the width of the button.
// menu.DropDown(button.worldBound, button, true, false);
// This sets the width of the dropdown menu to the width of the longest item.
// menu.DropDown(button.worldBound, button, true, true);
};
root.Add(button);
}
}