как поменять поля между пунктами в popupmenu - PullRequest
0 голосов
/ 02 января 2019

Я хочу изменить расстояние между элементами в моем всплывающем меню на Android

Я имею в виду следующее пространство: enter image description here

Я надеюсь, что естьпрямолинейное решение, но, как я знаю Android, это не будет так просто

в любом случае, я хотел бы также установить maxHeight моего всплывающего окна ... В этом случае всплывающее окно отображается в TextView "Выберитеприз ", поэтому он заполняет пространство над ним, но не все элементы помещаются в это пространство, поэтому Android автоматически создает представление scrow (по вертикали)

Дело в том, что я знаю, что 100% пользователей не будут использовать этот свитокпоэтому элементы в моем меню ниже «Путешествие» никогда не будут видны.

Как мне установить высоту, чтобы освободить место для всех элементов?

============= ОБНОВЛЕНИЕ ================

Просто чтобы прояснить, это не счетчик, это всплывающее меню

this.popupCategories = new PopupMenu(this, this.categoryLabel);
for (Giveaway.GiveawayCategoryGroup catGroup : categoryGroups) {

            SubMenu submenu = this.popupCategories.getMenu().addSubMenu(catGroup.getDescription(lang));
            for (Giveaway.GiveawayCategory cat : (Collection<? extends Giveaway.GiveawayCategory>) catGroup.getCategories()) {
                if (cat.isActive())
                    submenu.add(Menu.NONE, cat.getValue().hashCode(), (int) cat.getOrder(), cat.getDescription(lang));
            }
        }

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Вам нужно установить высоту строки предпочитаемого вами элемента в AppTheme внутри styles.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:listPreferredItemHeightSmall">20dp</item>
</style>

Возможно, вам придется немного изменить это число, чтобы получить правильное значение, но оно определяет высотуэти строки.Обязательно замените Theme.AppCompat.Light.DarkActionBar на то, что вы в данный момент используете.

Что касается установки максимальной высоты, боюсь, вам придется создать для этого собственный собственный класс расширения, например вэтот пример .

0 голосов
/ 21 января 2019

Вы можете создать макет для всплывающего меню и инициализировать его в своей деятельности следующим образом: XML

> <?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="match_parent"
>     android:gravity="center"
>     android:background="@android:color/transparent">
>     <LinearLayout
>         android:layout_width="wrap_content"
>         android:layout_height="YOUR MAX HEIGHT"
>         android:gravity="center"
>         android:weightsum="YOUR NUMBER OF ITEMS"
>         android:orientation="vertical"
>         android:layout_gravity="center"
>         >
>         <TextView
>             android:layout_width="wrap_content"
>             android:layout_height="0dp"
>             android:weight="1" /> ...no of views items
>     </LinearLayout> </LinearLayout>

ИНИЦИАЛИЗИРОВАТЬ ЭТО КАК

View parentv = findViewById(R.id.activityview); //id of parent view of activity in which popup will be shown
LayoutInflater layoutInflater
                = (LayoutInflater) getBaseContext()
                .getSystemService(LAYOUT_INFLATER_SERVICE);
        View popupView = layoutInflater.inflate(R.layout.YOURPOPUPMENU, null);
        final PopupWindow popupWindow = new PopupWindow(
                popupView,
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.MATCH_PARENT);
        TextView tv = popupView.findViewById(R.id.textviewid); //to do something with textview
        tv.setText("Fashion");
        popupWindow.setOutsideTouchable(true); //if you want to dismiss popup if clicked outside
        popupWindow.setFocusable(true);
        // Removes default background.
        popupWindow.setBackgroundDrawable(new android.graphics.drawable.ColorDrawable(android.graphics.Color.TRANSPARENT));
//        popupWindow.setAnimationStyle(R.style.righttoleftstyle); can put animation to slide in popupmenu by defining any animation
        popupWindow.showAtLocation(parentv, Gravity.START | Gravity.TOP,0,0);

// willпоказать всплывающее окно в верхнем левом углу экрана вида деятельности, вы можете попробовать несколько итераций, чтобы показать, где на экране в соответствии с вашими потребностями

Надеюсь, это поможет!

0 голосов
/ 15 января 2019

PopupMenu предметы обычные MenuItem;это тот же атрибут, но другой родительский стиль:

<style name="customPopupMenuStyle" parent="@android:style/Widget.PopupMenu">
    <item name="android:listPreferredItemHeightSmall">32dp</item>
</style>

это влияет только на PopupMenu, которому был назначен стиль.

и там можно установить пользовательский ActionView (за отдельный элемент, а не как шаблон):

MenuItem item = menu.findItem(R.id.itemMenu);
MenuItemCompat.setActionView(item, R.layout.layout_menu);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...