How to align GUILayout elements

Viewed 5904

I am working on improving a transform inspector a bit and currently got stuck.

Is there a way to align these buttons to the right?

enter image description here

These are just two GUILayout buttons wrapped inside the horizontal group.

public override void OnInspectorGUI()
{
    EditorGUILayout.BeginHorizontal();
    GUILayout.Button("World", EditorStyles.miniButtonLeft, GUILayout.Width(85));
    GUILayout.Button("Local", EditorStyles.miniButtonRight, GUILayout.Width(85));
    EditorGUILayout.EndHorizontal();

    defaultEditor.OnInspectorGUI();
}

How can I position them to the right?

2 Answers

You can move your buttons to the right side by adding a flexible space in front of them:

public override void OnInspectorGUI()
{
    EditorGUILayout.BeginHorizontal();
    GUILayout.FlexibleSpace();
    GUILayout.Button("World", EditorStyles.miniButtonLeft, GUILayout.Width(85));
    GUILayout.Button("Local", EditorStyles.miniButtonRight, GUILayout.Width(85));
    EditorGUILayout.EndHorizontal();

    defaultEditor.OnInspectorGUI();
}

A flexible space simply eats all left over space within a layout group. If you have multiple flexible spaces, the space is equally distributed between them.

You might find some more details in my IMGUI crash course.

As alternative to Bunny83's answer in case you rather want to align the buttons with the left end of the other fields you instead just need to insert a space that has the same size as the prefix labels:

public override void OnInspectorGUI()
{
    EditorGUILayout.BeginHorizontal();
    {
        GUILayout.Space(EditorGUIUtility.labelWidth);

        if(GUILayout.Button("World", EditorStyles.miniButtonLeft))
        {
            ...
        }

        if(GUILayout.Button("Local", EditorStyles.miniButtonRight))
        {
            ...
        }
    }
    EditorGUILayout.EndHorizontal();

    defaultEditor.OnInspectorGUI();
}
Related