android中悬浮在activity上的透明背景dialog实现(代码片段)

邹奇 邹奇     2023-01-02     441

关键词:

背景

最近项目中有用到,且手机上很多 app 也会有这个功能,记录一下。


资源准备

这里给出实现代码前先准备一些要用到的资源文件。

  • style 资源文件

style资源文件在 res/values/styles.xml 中声明,如下:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <!--  透明背景对话框 style-->
    <style name="trans_bg_dialog" parent="@android:style/Theme.Dialog">
<!--        是否有边框-->
        <item name="android:windowFrame">@null</item>
<!--        是否在悬浮Activity之上-->
        <item name="android:windowIsFloating">true</item>
<!--        半透明-->
        <item name="android:windowIsTranslucent">true</item>
<!--        无标题-->
        <item name="windowNoTitle">true</item>
<!--        窗口背景透明-->
        <item name="android:windowBackground">@drawable/transparent</item>
<!--        dimEnabled值为false,那弹出的对话框背景是亮的-->
<!--        dimEnabled值为true,搭配dimAmount属性使用,可以控制对话框背景的亮暗-->
        <item name="android:backgroundDimEnabled">true</item>
<!--        取值 0-1 可使用浮点数值:0.618 值越大背景越暗-->
        <item name="android:backgroundDimAmount">0.9</item>
    </style>

</resources>

  • drawable 资源文件

该资源文件 transparent.xml 在 res/drawable 中声明,如下:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
  <solid android:color="@android:color/transparent"/>
</shape>
  • 自定义 view 布局文件

布局文件 dialog_view_simple.xml 在 res/layout 中声明,如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:padding="10dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <TextView
        android:text="android robot"
        android:textStyle="bold"
        android:textSize="24sp"
        android:padding="10dp"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <ImageView
        android:src="@mipmap/ic_launcher_round"
        android:layout_marginTop="10dp"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

将上面这些资源文件准备好后,同学们再继续下一步。


实现代码

代码相对简单,注释详细,如下:

/**
     * 弹出对话框时背景透明
     */
    private void testAlertDialogBgTrans() 
        // 创建 Dialog 对象
        Dialog dialog = new Dialog(this, R.style.trans_bg_dialog);
        // 构建自定义 view
        View view = LayoutInflater.from(this).inflate(R.layout.dialog_view_simple, null);
        // dialog 设置自定义内容试图 view
        dialog.setContentView(view);

        Window window = dialog.getWindow();
        // 获取屏幕宽高
        WindowManager manager = window.getWindowManager();
        Display display = manager.getDefaultDisplay();
        int w = display.getWidth();
        int h = display.getHeight();
        // 设置 dialog 显示宽高
        WindowManager.LayoutParams params = window.getAttributes();
        params.height = WindowManager.LayoutParams.WRAP_CONTENT;// 自适应,实际可自行定义
        params.width = w * 720 / 1280;// 实际可自定义
        params.gravity = Gravity.CENTER;// 对话框居中
        window.setAttributes(params);
        // 显示 dialog
        dialog.show();
    

上面的代码就能实现透明 dialog 效果,同学们可以自己修改 style 相关属性,看下各属性对 dialog 效果的影响,从而找到自己需要的效果,当然以需求为准咯!

多多实践下咯!


技术永不眠!我们下期见!

android设置activity背景为透明style的方法

参考技术A1.设置Theme.Translucent只需要在Manifest中需要透明的Activity内设置theme为以上任意一个就可以了2.在Activity的layout.xml文件中,设置父布局背景透明度(不设置背景色默认全透明),不设置透明度看不出效果,如果子控件设置了背... 查看详情

android悬浮框获得焦点并屏蔽按键

利用这种方式获得一个悬浮框里面有Edit控件需要获得焦点mWindowManager.addView(mFloatLayout,wmParams);但在可以获得焦点时会拦截back或menu键使得下面的其它应用不能正常关闭等如何在获得焦点的情况下忽略其它按键?也就是说接受触摸... 查看详情

具有透明布局的 Android Activity

】具有透明布局的AndroidActivity【英文标题】:AndroidActivitywithTransparentLayout【发布时间】:2013-07-2322:54:42【问题描述】:我希望创建一个看起来像弹出窗口的活动那是活动的透明背景,我希望在设备屏幕右上角的屏幕上的自定义位... 查看详情

如何动态设置activity背景透明度

在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。  Android总Activity的启动模式分为四种:Activity启动模式设置:<activityandroi... 查看详情

android适配-view设置背景闪烁

...动的效果,又能保证软键盘弹出时的效果。但由此也引出Android系统新老版本不兼容的2个地方。1.部分手机activity如果初始化时是非透明的,动态修改为透明的,没效果。2.Android6.0以下,activity是透明的,即便里面有view不是透明的... 查看详情

Android 透明 Activity 没有覆盖整个屏幕

】Android透明Activity没有覆盖整个屏幕【英文标题】:AndroidTransparentActivitydoesn\'tcoverthewholescreen【发布时间】:2019-09-0208:55:15【问题描述】:我一直在尝试创建一个不透明的Activity,它与背景中显示的另一个Activity重叠。这是我的XML... 查看详情

activity实现系统dialog(系统级的悬浮窗)(代码片段)

...le">true</item><!--背景透明--><itemname="android:windowIsTranslucent">true</item><!--是否有覆盖--><itemname="android:windowContentOverlay">@null</item><!--是否浮动--><itemname="android:windowIs... 查看详情

activity实现系统dialog(系统级的悬浮窗)(代码片段)

...le">true</item><!--背景透明--><itemname="android:windowIsTranslucent">true</item><!--是否有覆盖--><itemname="android:windowContentOverlay">@null</item><!--是否浮动--><itemname="android:windowIs... 查看详情

如何让android的activity变成完全透明的

resources添加一个style标签parent继承android:Theme.Light.NoTitleBar itemandroid:windowBackground属性可以设置一个透明颜色然后在需要透明的ActivityonCreate中或者项目清单文件中设置这个自定义皮肤即可 示例代码:<style name="custom... 查看详情

具有透明背景的形状上的涟漪

...用以下形状<?xmlversion="1.0"encoding="utf-8"?><selectorxmlns:android="http://schemas.android.com/apk/res/android"& 查看详情

easyui实现背景图片半透明状态,悬浮在大背景之上(代码片段)

首先是查找素材,使用AI将所需要的图案画出来,切记将图案的背景设置为所需要的透明状态。项目使用的是easyui架构为啥加两个背景图呢,因为这样的布局最开始是给一个矩形框加上的背景图片,若是还使用矩形框,则实现透... 查看详情

android编程中,activity默认的背景色是白色还是黑色啊?

参考技术Aandroid编程中,Activity默认的背景色是白色,主要是因为其变成软件默认的是白色。要想改变其背景颜色,只需在BackgroundColor选项里进行更改即可。当一个Activity实例被创建、销毁或者启动另外一个Activity时,它在这四种... 查看详情

在 iOS 15 上的 VStack 中,TabView 背景透明度无法正常工作

】在iOS15上的VStack中,TabView背景透明度无法正常工作【英文标题】:TabViewbackgroundtransparencydoesn\'tworkasexpectedwithScrollViewinsideVStackoniOS15【发布时间】:2021-12-0814:15:24【问题描述】:我正在手动绘制导航栏,所以我将屏幕内容放在VSt... 查看详情

为啥创建的Activity背景是透明的?

】为啥创建的Activity背景是透明的?【英文标题】:WhycreatedActivitybackgroundistransparent?为什么创建的Activity背景是透明的?【发布时间】:2018-11-2121:44:57【问题描述】:我创建了一个目标版本为26的应用程序。当我创建Activity背景时... 查看详情

如何让picturebox背景色透明

winform程序中的PictureBox载入了一张带有透明度的PNG图片,悬浮于其他控件之上,但是它的背景不是透明的,即使把它的BackColor设置为Color.Transparent,或者是0x00000000,它仍然具有背景色,它似乎仅对form的背景透明,对于其上的控件... 查看详情

如何在 Android 上创建一个透明的 Activity?

】如何在Android上创建一个透明的Activity?【英文标题】:HowdoIcreateatransparentActivityonAndroid?【发布时间】:2011-01-1117:25:10【问题描述】:我想在另一个Activity之上创建一个透明的Activity。我怎样才能做到这一点?【问题讨论】:你... 查看详情

鼠标悬浮显示文字半透明背景

鼠标悬浮显示文字半透明背景鼠标悬浮头像,出现文字“上传头像”,之前都是使用<atitle="上传头像"></a>这样的title来实现现在设计稿,是在头像上面,显示的大号字体的文字,且有一层黑色遮罩层第一想法是,多写一... 查看详情

背景上的透明按钮文本

】背景上的透明按钮文本【英文标题】:Transparentbuttontextoverthebackground【发布时间】:2016-10-1013:35:07【问题描述】:我正在尝试在qml中制作透明文本。我有一个自定义按钮:ApplicationWindowvisible:truewidth:320height:240style:ApplicationWindowSt... 查看详情