将弹出菜单设置为全屏

时间:2016-07-20 09:18:47

标签: android popupmenu

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

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

6 个答案:

答案 0 :(得分:5)

我收到了你的问题。而不是修改某些东西使用新的小部件,它可以轻松地满足您的需要并与更新的版本兼容。

Google将新材​​料概念引入Bottom-Sheet

要在Android中使用它,您可以使用像this这样的git hub库。

答案 1 :(得分: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相关的源代码并实现类似的东西,但是你想要的是大小。

答案 2 :(得分:1)

Trythis:

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

答案 3 :(得分:1)

尝试在您的样式中设置minWidth,如下所示

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

答案 4 :(得分:0)

试试这个,

inflater.inflate(R.layout.menu,menu);

menu.inflate(R.layout.popup_menu);

答案 5 :(得分:0)

让它变得半透明。我为此弹出相同。请检查一下。也许它也适合你。

在您的清单中:

        string st = "Ebook/AspNetBook.Pdf/.NetBook";
        string newst = st.Substring(st.IndexOf('/') + 1);
        string outptst = newst.Substring(0,newst.IndexOf('/'));

风格:主题:

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

,最后是您的xml布局:

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

    }
}