【问题标题】:Set Popup menu to full screen将弹出菜单设置为全屏
【发布时间】:2019-05-09 16:51:51
【问题描述】:

注意:这是弹出菜单,不是弹出窗口,请大家仔细阅读。

我已经实现了弹出菜单。它显示在屏幕的一半。我想将其传播到设备的整个宽度。我试图通过将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 : 请不要建议我使用弹出窗口。如果没有任何效果,这是我最后的选择。

【问题讨论】:

  • 你会从下面的链接stackoverflow.com/questions/24466869/…找到答案
  • 尝试阅读我的问题。它是弹出菜单而不是窗口。我特别提到了问题末尾的注释。
  • 好问题......在我看来这是不可能的......根据你的需要尝试我的项目但无法成功......我正在检查你的问题.......如果你取得了成功,而不是提出对我来说很有趣的答案......如果有人根据你的要求回答这个问题,我们将不胜感激......
  • 我正在做的最糟糕的事情是更改宽度......试试这个 将更多空格放在字符串末尾的标题中,如 android:title="Edit Profile ." />
  • 我试过这个想法,但我有来自网络服务的数据。所以它不是有效的解决方案。我们必须适合它。

标签: android popupmenu


【解决方案1】:

我明白了你的问题。无需修改某些内容,而是使用新的小部件,它可以轻松满足您的需求并与新版本兼容。

Google 引入新的 Material 概念为Bottom-Sheet

要在 android 中使用它,您可以使用 git hub 库,例如 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 相关的源代码并实现类似的东西,但具有您想要的大小。

    【讨论】:

    • 如何在我的片段类中使用此方法。我曾经在课堂上复制但无法导入 MenuPopup。是内置类吗
    【解决方案3】:

    试试这个:

    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);

    menu.inflate(R.layout.popup_menu);

    【讨论】:

    • 欢迎来到 SO Ravina。但不幸的是,这用于膨胀菜单(来自 R.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>
    

    【讨论】:

    • 你的方法在某种程度上是正确的。但是创建另一个活动拥有单独的生命周期,对于我的情况,我希望在另一个线程中弹出窗口。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 2016-04-15
    • 1970-01-01
    相关资源
    最近更新 更多