How change position of popup menu on android overflow button?

后端 未结 5 2137
再見小時候
再見小時候 2020-12-06 01:46

I just like to implement somethings same as popup menu in the Gmail app, anchored to the overflow button at the top-right. for that I used the same code as google tutorial f

相关标签:
5条回答
  • 2020-12-06 02:18

    Maybe you might consider using PopupWindow instead.

    popupwindow.showAsDropDown(view,x,y);
    

    Here x and y is position of popup window relative to your view.

    0 讨论(0)
  • 2020-12-06 02:25

    Applying gravity helped in my case

    PopupMenu popup = new PopupMenu(this, v, Gravity.RIGHT);
    
    0 讨论(0)
  • 2020-12-06 02:27

    After trying out each approach that I have found, I would think putting an anchoring view might still be an easier and simpler way, especially when you are using a more flexible layout, e.g. ConstraintLayout.

    Just put an invisible view to where you want the popup menu to anchor:

    <View
        android:id="@+id/anchor_menu"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginTop="10dp"
        app:layout_constraintStart_toStartOf="@+id/button_menu"
        app:layout_constraintTop_toBottomOf="@+id/button_menu"
        />
    

    Then use it as the anchoring view instead:

        mPopupMenu = new PopupMenu(getActivity(), mPopupMenuAnchor);
    

    Boom, it is done.

    0 讨论(0)
  • 2020-12-06 02:36

    To overlap only, use this approach:

    PopupMenu popupMenu = new PopupMenu(getContext(), this, Gravity.NO_GRAVITY, R.attr.actionOverflowMenuStyle, 0);
    

    To get a PopupMenu with a bright background and a detailed control over the offsets use this approach:

    styles.xml

    <style name="PopupMenuOverlapAnchor" parent="@style/Theme.AppCompat.Light">
       <item name="android:overlapAnchor">true</item>
       <item name="android:dropDownVerticalOffset">0dp</item>
       <item name="android:dropDownHorizontalOffset">0dp</item>
    </style>
    

    Code:

    ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(getContext(), R.style.PopupMenuOverlapAnchor);
    PopupMenu popupMenu = new PopupMenu(contextThemeWrapper, this);
    

    Does not work anymore: Here a simple way to adjust the position of a PopupMenu. It positions the menu over its anchor view (overflowButton) like the menu in the action bar:

        PopupMenu popupMenu = new PopupMenu(context, overflowMenuButton);
        popupMenu.inflate(R.menu.my_menu);
    
        // Fix vertical offset
        overflowMenuButton.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                popupMenu.show();
                if (popupMenu.getDragToOpenListener() instanceof ListPopupWindow.ForwardingListener)
                {
                    ListPopupWindow.ForwardingListener listener = (ListPopupWindow.ForwardingListener) popupMenu.getDragToOpenListener();
                    listener.getPopup().setVerticalOffset(-overflowMenuButton.getHeight());
                    listener.getPopup().show();
                }
            }
        });
    

    0 讨论(0)
  • 2020-12-06 02:37

    Add the following piece of code to your activity:

    PopupWindow popupwindow_obj; // create object
    
    popupwindow_obj=popupDisplay();  // initialize in onCreate()
    
    popupwindow_obj.showAsDropDown(clickbtn,-40, 18); // where u want show on view click event
    
    public PopupWindow popupDisplay() { // disply designing your popoup window
        final PopupWindow popupWindow = new PopupWindow(this); // inflet your layout or diynamic add view
    
        View view; 
    
        LayoutInflater inflater = (LayoutInflater)   getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    
        view = inflater.inflate(R.layout.mylayout, null);
    
        Button item = (LinearLayout) view.findViewById(R.id.button1);
    
        popupWindow.setFocusable(true);
        popupWindow.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
        popupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
        popupWindow.setContentView(view);
    
        return popupWindow;
    }
    

    Create an XML in res/layout directory and name it mylayout.xml

    <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
    
            <Button
                android:id="@+id/button1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Window test" />
    </LinearLayout>
    
    0 讨论(0)
提交回复
热议问题