Android-实现底部弹出PopupWindow并让背景逐渐变暗

Android-实现底部弹出PopupWindow并让背景逐渐变暗

在android开发中,经常需要通过点击某个按钮弹出对话框或者选择框,通过Dialog或者PopupMenu、PopupWindow都能实现。
这里主要介绍后两者:PopupMenu、PopupWindow的实现。 先看两个效果图左边PopupMenu,右边PopupWindow:
PopupMenu PopupWindow

一、PopupMenu实现:

PopupMenu实现起来比较简单,主要用来实现根据按钮附近弹出的对话框。

  • 首先定义一个menu文件\res\menu\headmenu.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="com.arbo.hero.LoginActivity">
    <item
        android:id="@+id/camera"
        android:title="拍照"
        android:orderInCategory="100"
        app:showAsAction="never" />
    <item
        android:id="@+id/gallery"
        android:title="从相册中选取"
        android:orderInCategory="100"
        app:showAsAction="never" />
    <item
        android:id="@+id/cancel"
        android:title="取消"
        android:orderInCategory="100"
        app:showAsAction="never" />

</menu>
  • 创建一个PopupMenu并添加点击事件:
private void showPopmenu(View view){
        popupMenu = new PopupMenu(this,view);
        popupMenu.getMenuInflater().inflate(R.menu.headmenu,popupMenu.getMenu());
        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch(item.getItemId()){
                    case R.id.camera:
                        Toast.makeText(HeadPortrait.this,"Click camera",Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.gallery:
                        Toast.makeText(HeadPortrait.this,"Click gallery",Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.cancel:
                        Toast.makeText(HeadPortrait.this,"Click cancel",Toast.LENGTH_SHORT).show();
                        break;
                }
                return false;
            }
        });
        popupMenu.show();
    }
  • MainActivity很简单,点击按钮调用showPopmenu()方法即可:
public class MainActivity extends Activity{
   
    @Override
    protected void onCreate(Bundle savedInstan
  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
可以通过设置遮罩层来实现背景的效果。具体实现步骤如下: 1. 在窗控件的父控件上添加一个遮罩层控件,用来遮盖父控件,使其。 2. 设置遮罩层控件的背景色为半透明的黑色,可以使用QColor类来设置颜色。 3. 设置遮罩层控件的透明度,使其达到想要的程度。可以使用setOpacity()方法来实现。 4. 显示窗控件和遮罩层控件。 下面是一个简单的示例代码: ```python from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout from PyQt5.QtGui import QColor, QPalette from PyQt5.QtCore import Qt class PopupWindow(QWidget): def __init__(self, parent=None): super().__init__(parent=parent) self.label = QLabel('This is a popup window', self) layout = QVBoxLayout(self) layout.addWidget(self.label) def show_popup(self): # 添加遮罩层 self.mask = QWidget(self.parent()) self.mask.setAutoFillBackground(True) palette = self.mask.palette() palette.setColor(QPalette.Window, QColor(0, 0, 0, 127)) self.mask.setPalette(palette) self.mask.setWindowFlags(Qt.FramelessWindowHint) self.mask.setGeometry(self.parent().geometry()) self.mask.show() # 显示窗 self.setGeometry(400, 300, 200, 100) self.show() def close_popup(self): self.mask.close() self.close() ``` 在上面的代码中,先创建了一个PopupWindow类作为窗控件,并添加了一个show_popup()方法用来显示窗,以及一个close_popup()方法用来关闭窗。 在show_popup()方法中,首先创建了一个遮罩层控件并设置其背景色和透明度。然后将遮罩层控件显示来,并显示窗控件。 在close_popup()方法中,关闭遮罩层控件和窗控件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值