Установите всплывающее меню в полноэкранном режиме

Примечание. Это всплывающее меню не всплывающее окно. Поэтому я прошу вас всех внимательно прочитать.

У меня реализовано меню. Он отображается в половине экрана. Я хочу распространить это на всю ширину устройства. Я попытался изменить стиль, установив layout_width как match_parent, но без успеха.

Ниже я попытался:

Стиль

 <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->

        <item name="popupMenuStyle">@style/PopupMenu</item>
    </style>

  <!-- Change Overflow Menu Background -->
    <style name="PopupMenu" parent="android:Widget.Holo.Light.ListPopupWindow">
        <item name="android:popupBackground">#888888</item>
        <item name="android:layout_width">match_parent</item>
    </style>

Ниже мой код Java:

  PopupMenu menu = new PopupMenu(getActivity(), tvnext);


    for (int i = 0; i < array.size(); i++) {

        menu.getMenu().add(1, i, 1, array.get(i).getAccountName());

    }


    menu.show();

    menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            setUpNextFunctionality(item.getItemId());


            return false;
        }
    });

P.S: Пожалуйста, не предлагайте мне использовать всплывающее окно. Это мой последний вариант, если ничего не работает.

Ответ 1

У меня возник вопрос. Вместо того, чтобы модифицировать что-то, используйте новый виджет, который может легко выполнить ваши необходимые и совместимые с более новой версией.

Google представляет новую концепцию материала как Bottom-Sheet

Чтобы использовать его в android, вы можете использовать библиотеки-концентраторы git, такие как this.

Ответ 2

Я не думаю, что вы можете сделать это, не используя свое собственное всплывающее окно, подобное PopupMenu. Если вы проверите MenuPopupHelper::createPopup:

@NonNull
private MenuPopup createPopup() {
    final WindowManager windowManager = (WindowManager) mContext.getSystemService(
            Context.WINDOW_SERVICE);
    final Display display = windowManager.getDefaultDisplay();
    final Point displaySize = new Point();

    if (Build.VERSION.SDK_INT >= 17) {
        display.getRealSize(displaySize);
    } else if (Build.VERSION.SDK_INT >= 13) {
        display.getSize(displaySize);
    } else {
        displaySize.set(display.getWidth(), display.getHeight());
    }

    final int smallestWidth = Math.min(displaySize.x, displaySize.y);
    final int minSmallestWidthCascading = mContext.getResources().getDimensionPixelSize(
            R.dimen.abc_cascading_menus_min_smallest_width);
    final boolean enableCascadingSubmenus = smallestWidth >= minSmallestWidthCascading;

    final MenuPopup popup;
    if (enableCascadingSubmenus) {
        popup = new CascadingMenuPopup(mContext, mAnchorView, mPopupStyleAttr,
                mPopupStyleRes, mOverflowOnly);
    } else {
        popup = new StandardMenuPopup(mContext, mMenu, mAnchorView, mPopupStyleAttr,
                mPopupStyleRes, mOverflowOnly);
    }

    // Assign immutable properties.
    popup.addMenu(mMenu);
    popup.setOnDismissListener(mInternalOnDismissListener);

    // Assign mutable properties. These may be reassigned later.
    popup.setAnchorView(mAnchorView);
    popup.setCallback(mPresenterCallback);
    popup.setForceShowIcon(mForceShowIcon);
    popup.setGravity(mDropDownGravity);

    return popup;
}

вы увидите, что размер типа PopupMenu жестко запрограммирован в зависимости от размера экрана. Поэтому, вероятно, простой способ - проверить исходный код PopupMenu и реализовать нечто подобное, но с размерами, которые вы хотели бы иметь.

Ответ 3

Trythis:

pwindow = 
    new PopupWindow(layoutt,LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,true);

Ответ 4

Попробуйте установить minWidth в вашем стиле, как показано ниже

     <item name="android:minWidth">1000dp</item>

Ответ 5

попробуйте это,

inflater.inflate(R.layout.menu, меню);

или

menu.inflate(R.layout.popup_menu);

Ответ 6

Сделайте его полупрозрачным. Я сделал то же самое для всплывающих окон. Пожалуйста, проверьте это. Возможно, это также сработает для вас.

В вашем манифесте:

    <activity
            android:name=".ActivityInviteFriend"
            android:theme="@style/Theme.TransparentInfo">

        </activity>

В стиле: главная тема:

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/LightappActionBarColor</item>
        <item name="colorPrimaryDark">@color/appColor</item>
        <item name="colorAccent">@color/btn_color</item>
        <item name="windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
    </style>

и ваша пользовательская тема:

    <color name="semiTransparentBlack">#00000000</color>

    <style name="Theme.TransparentInfo" parent="AppTheme">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@color/semiTransparentBlack</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">false</item>
        <item name="android:backgroundDimEnabled">true</item>
    </style>

Ваша деятельность:

package com.gc.naifizzy;

import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.Toast;

public class ActivityInviteFriend extends AppCompatActivity {
    Button btn_send;
    Snackbar snackbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setBackgroundDrawable(
                new ColorDrawable(android.graphics.Color.TRANSPARENT));
        setContentView(R.layout.activity_invite_friend);
        btn_send = (Button) findViewById(R.id.btn_send);
        btn_send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //snack("Invitation sent successfully...");
                Toast.makeText(ActivityInviteFriend.this, "Invitation sent successfully", Toast.LENGTH_SHORT).show();
                finish();
            }
        });
    }

    public void snack(String data) {
        snackbar = Snackbar
                .make(findViewById(android.R.id.content), data, Snackbar.LENGTH_LONG)
                .setAction("Dismiss", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        snackbar.dismiss();
                    }
                });

        snackbar.show();

    }
}

и, наконец, ваш XML-макет:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#502f2f2f">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_centerInParent="true"
        android:background="@android:color/white"
        android:paddingLeft="5dp"
        android:paddingRight="5dp">

        <RelativeLayout
            android:id="@+id/dds"
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:background="#112f2f2f"
            android:paddingTop="10dp"
            android:visibility="visible">


            <TextView
                android:id="@+id/txt_what"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_centerVertical="true"
                android:gravity="center_vertical|left"
                android:paddingLeft="10dp"
                android:text="Invite people to join your tree on Naifizzy"
                android:textColor="@color/appColor"
                android:textSize="15sp"
                android:textStyle="bold" />

        </RelativeLayout>

        <View
            android:id="@+id/view"
            android:layout_width="match_parent"
            android:layout_height="3dp"
            android:layout_below="@id/dds"
            android:layout_marginTop="3dp"
            android:alpha="0.5"
            android:background="@color/appColor"
            android:visibility="visible" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/view"
            android:layout_marginTop="20dp"
            android:gravity="center_vertical|center_horizontal"
            android:orientation="vertical">

            <TextView
                android:id="@+id/txt_share"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginLeft="10dp"
                android:text="Invite people by sharing this link "
                android:textColor="#992f2f2f"
                android:textSize="15sp" />

            <EditText
                android:id="@+id/edt_user_link"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:layout_below="@id/txt_share"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginTop="10dp"
                android:background="@drawable/layout_border"
                android:editable="false"
                android:paddingLeft="10dp"
                android:singleLine="true"
                android:text="http://naifizzy.com/@parik_dhakan"
                android:textColor="#992f2f2f"
                android:textSize="15sp" />

            <View
                android:id="@+id/view1"
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:layout_below="@id/edt_user_link"
                android:layout_marginBottom="20dp"
                android:layout_marginTop="20dp"
                android:alpha="0.5"
                android:background="@color/appColor" />

            <TextView
                android:id="@+id/txt_share2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@id/view1"
                android:layout_centerVertical="true"
                android:layout_marginLeft="10dp"
                android:text="Send by email "
                android:textColor="#992f2f2f"
                android:textSize="15sp" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:layout_marginBottom="30dp"
                android:layout_marginTop="10dp"
                android:orientation="horizontal"
                android:visibility="visible"
                android:weightSum="1">

                <LinearLayout
                    android:id="@+id/ed_l"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="0.2"
                    android:background="@drawable/layout_border"
                    android:orientation="horizontal"
                    android:visibility="visible">

                    <RelativeLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent">


                        <android.support.design.widget.TextInputLayout
                            android:id="@+id/edl_current"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:layout_centerInParent="true"

                            android:paddingTop="5dp"
                            android:textColorHint="#992f2f2f"
                            android:textSize="15sp">

                            <EditText
                                android:id="@+id/edt_mail"
                                style="@style/StyledTilEditText"
                                android:layout_width="match_parent"
                                android:layout_height="match_parent"
                                android:layout_centerHorizontal="true"
                                android:background="@android:color/transparent"
                                android:hint="Enter recipients' Email seprated by commas "
                                android:inputType="textEmailAddress"
                                android:paddingLeft="10dp"
                                android:textColor="#992f2f2f"
                                android:textColorHint="#992f2f2f"

                                android:textSize="15sp" />
                        </android.support.design.widget.TextInputLayout>

                        <ImageView
                            android:id="@+id/img_show"
                            android:layout_width="30dp"
                            android:layout_height="25dp"
                            android:layout_alignParentEnd="true"
                            android:layout_centerVertical="true"
                            android:layout_marginEnd="20dp"
                            android:scaleType="centerInside"
                            android:src="@drawable/ic_eye"
                            android:visibility="gone" />
                    </RelativeLayout>
                </LinearLayout>

                <EditText
                    android:id="@+id/edt_user_link2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_below="@id/txt_share2"
                    android:layout_marginLeft="10dp"
                    android:layout_marginRight="10dp"
                    android:background="@drawable/layout_border"

                    android:paddingLeft="10dp"
                    android:singleLine="true"
                    android:text="http://naifizzy.com/@parik_dhakan"
                    android:textColor="#992f2f2f"
                    android:textSize="15sp"
                    android:visibility="gone" />

                <Button
                    android:id="@+id/btn_send"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginRight="5dp"
                    android:layout_weight="0.8"
                    android:background="@drawable/signupbg"
                    android:gravity="center_vertical|center_horizontal"
                    android:text="Send\nInvites"
                    android:textColor="@android:color/white"
                    android:textSize="10sp" />
            </LinearLayout>


        </LinearLayout>
    </RelativeLayout>


</RelativeLayout>

Ответ 7

Вы нашли какое-нибудь решение @EminenT? У меня тоже такая же проблема