【问题标题】:Android Custom Popup menu with switch带有开关的 Android 自定义弹出菜单
【发布时间】:2016-03-30 22:21:41
【问题描述】:

如何自定义弹出菜单中的 menuItems?我需要第一个菜单项的开关。这是我到目前为止得到的:

menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="android.oli.com.fitnessapp.activities.LiveSelectActivity">

    <item
        android:icon="@drawable/ic_access_alarm_white_24dp"
        android:orderInCategory="100"
        app:showAsAction="always"
        android:visible="true"
        android:title="@string/action_settings"
        android:onClick="showPopup"/>

</menu>

menu_popup.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/one"
        android:title="One"/>

    <item
        android:id="@+id/setTime"
        android:title="Two"
        android:onClick="showTimePickerDialog"/>


</menu>

活动 sn-p

public void showPopup(MenuItem menuItem){
        View view = findViewById(R.id.action_alarm);
        PopupMenu popup = new PopupMenu(this, view);
        MenuInflater inflater = popup.getMenuInflater();
        inflater.inflate(R.menu.menu_popup, popup.getMenu());
        popup.show();
    }

【问题讨论】:

    标签: android menu switch-statement popupmenu


    【解决方案1】:

    您可以使用 popupwindow,因为它允许使用自定义布局。

    <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"
        tools:context=".MainActivity" 
        android:padding="5dp">
    
    <Switch
        android:id="@+id/mySwitch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="20dp"
        android:text="Play with the Switch" />
    
    <TextView
        android:id="@+id/switchStatus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/mySwitch"
        android:layout_marginTop="22dp"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium" />
    
    </RelativeLayout>
    

    在你的活动中实现这个方法:

    /* you should refer to a view to stick your popup wherever u want.
    ** e.g. Button button  = (Button) findviewbyId(R.id.btn);
    **     if(popupWindow != null)
    **         showPopup(button); 
    **/
        public void showPopup(View v) {
    
    
                LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                final View popupView = layoutInflater.inflate(R.layout.popup_filter_layout, null);
    
                popupWindow = new PopupWindow(
                        popupView,
                        ViewGroup.LayoutParams.WRAP_CONTENT,
                        ViewGroup.LayoutParams.WRAP_CONTENT);
    
                popupWindow.setBackgroundDrawable(new BitmapDrawable());
                popupWindow.setOutsideTouchable(true);
                popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
                    @Override
                    public void onDismiss() {
                        //TODO do sth here on dismiss
                    }
                });
    
                popupWindow.showAsDropDown(v); 
    }
    

    【讨论】:

    • BitmapDrawable() 已弃用。窗口不显示。我怎样才能让它看起来像一个弹出菜单?
    • 我编辑了我的答案。您应该调用 popupWindow.showAsDropDown(v) 使其可见。这就是真正的 BitmapDrawable() 已弃用,但它是一个技巧,可以让它在按下按键时消失。更多详情请参考stackoverflow.com/a/3122696/5923606
    • 并将其定位为 popupmenu,将您的视图“View view = findViewById(R.id.action_alarm)”输入到 popupWindow.showAsDropDown(view)
    • 我会试一试的! :)
    • 感谢@ugur 提供了创建具有自定义布局的弹出菜单的好主意,为您+1
    猜你喜欢
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 2015-07-15
    • 2011-11-07
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多