CaptainEddy Ответов: 1

Разработка Android - как сделать горизонтальное всплывающее меню


Я работаю над простым приложением для Android и хочу, чтобы всплывающее меню (Меню переполнения) отображалось горизонтально (все элементы выровнены в одну строку) после того, как я нажму кнопку ImageButton, что-то вроде этого - Изображение[^Есть ли какой-нибудь способ сделать так, чтобы это произошло?

мой код :

MainActivity.class

protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Button to show PopupMenu
        ImageButton buttonPlus = (ImageButton) findViewById(R.id.popupButton);
        popupMenu = new PopupMenu(this, buttonPlus);
        MenuInflater inflater = popupMenu.getMenuInflater();
        inflater.inflate(R.menu.menu, popupMenu.getMenu());

        buttonPlus.setOnClickListener(new ImageButton.OnClickListener()
        {
            public void onClick(View v)
            {
                popupMenu.show();
            }
        });
    }


menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"

      xmlns:app="http://schemas.android.com/apk/res-auto"

      xmlns:tools="http://schemas.android.com/tools"

      tools:context="com.example.captain.pc_1.MainActivity">

    <group android:checkableBehavior="single">
        <item

            android:id="@+id/_N1"

            android:orderInCategory="100"

            android:title="N1"

            app:showAsAction="never"/>

        <item

            android:id="@+id/_M2"

            android:orderInCategory="101"

            android:title="N2"

            app:showAsAction="never"/>
    </group>

</menu>


Приведенный выше код дает вывод выглядит примерно так этот

Что я уже пробовал:

Я видел много постов, связанных с моим вопросом, но ни один из них не сработал. Большинство из них просили использовать HorizontalScrollView, но это не то, что я хочу. Любая помощь будет оценена по достоинству.

1 Ответов

Рейтинг:
12

Peter Leow

Если вы хотите иметь пользовательский макет для всплывающего окна, вы должны использовать PopupWindow[^]
Попробуйте следующую демонстрацию:
1. Создайте popup.xml вот так:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:orientation="horizontal"

    android:removed="#f46464">
    <RadioGroup

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:orientation="horizontal"

        android:id="@+id/radioGroupGender"

        android:layout_weight="2">
        <RadioButton

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="Female"

            android:id="@+id/radFemale"

            android:layout_gravity="center_vertical" />
        <RadioButton

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="Male"

            android:id="@+id/radMale"

            android:layout_gravity="center_vertical" />
    </RadioGroup>
</LinearLayout>

2. Добавьте следующий код в метод onClick() :
LayoutInflater layoutInflater
        = (LayoutInflater) getBaseContext()
        .getSystemService(LAYOUT_INFLATER_SERVICE);

final View popupView = layoutInflater.inflate(R.layout.popup, null);
final PopupWindow popupWindow = new PopupWindow(
        popupView,
        LayoutParams.WRAP_CONTENT,
        LayoutParams.WRAP_CONTENT, true);

popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);

popupWindow.setBackgroundDrawable(new BitmapDrawable());

View parent = view.getRootView();

popupWindow.showAtLocation(parent, Gravity.CENTER, 0, 0);

Вы получите всплывающее окно с горизонтально выровненными переключателями. Он закрывается, когда вы щелкаете снаружи, как всплывающее меню.