在 Activity 之上创建一个透明对话框

2023-12-30

背景

我试图在当前活动之上放置一个层,该层将解释当前屏幕上发生的情况,类似于联系+应用程序 https://play.google.com/store/apps/details?id=com.contapps.android .

我知道有一些解决方案(比如展示案例库 https://stackoverflow.com/questions/17972903/alternative-to-showcase-library-for-app-user-tutorials和 superToolTips 库),我也知道我可以创建一个视图并将其添加到活动窗口中将其设置在顶部,但我需要将整个对话框层放在顶部。

Problem

无论我尝试什么,每个解决方案都无法按照我需要的方式工作。

简而言之,我需要的是:

  • 全屏对话框。

  • 操作栏、通知栏和后面的活动内容没有变化(不是视觉上的,也不是逻辑上的),这意味着对话框后面的所有内容都保持与对话框显示前一刻显示的相同。

  • 除了我用于对话框的视图之外,它是透明的,它应该正常显示。

我尝试过什么

可悲的是,我总是只得到我需要的一部分。

这是我的代码:

样式.xml:

<style name="full_screen_dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    </style>

MainActivity.java:

...
final Dialog dialog = new Dialog(this, R.style.full_screen_dialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.floating_tutorial);
dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
dialog.getWindow().setFormat(PixelFormat.TRANSLUCENT);
dialog.show();

这段代码会将布局放在活动之上,但遗憾的是它没有任何透明度,即使我已经设置了它。我使用的布局非常简单,这就是我不发布它的原因。

Question

我缺少什么?应该做什么来修复代码?

我怎样才能使对话框既透明,全屏,又不会改变操作栏和通知栏。


工作溶液

编辑:找到一个好的解决方案后,这是工作代码:

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final Dialog dialog = new Dialog(this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.floating_tutorial);
    final Window window = dialog.getWindow();
    window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
    window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.show();
}

只需更改对话框的背景颜色即可:

dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

Edit:

这可以防止暗淡效果:

dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Activity 之上创建一个透明对话框 的相关文章

  • Android SQLite 数据库从查询中删除重复项

    我是 SQLite 新手 我使用此查询是为了从特定用户的列中提取所有行 Cursor c db query true TABLE COLUMN USER user null null null null null 这是表格的示例 group
  • 使用 android 将图像上传到 Flickr

    我需要将 Flickr 与 android 集成 我已完成身份验证 我需要将图像上传到 flickr 但我不知道如何执行相同操作 我参考文件 http www flickr com services api upload api html
  • Android 上的多处理

    我一直在 Android 上执行一些测试 以验证并行化算法 如 FFT 的性能可以提高多少 我通过使用带有 JNI FFTW 的 pthread 和 Java 线程 来自 JTransforms 来实现这些算法 我没有像预期那样通过使用线程
  • 如何检测手机一整圈(360 度)?

    由于我在网络上搜索没有找到任何相关答案 因此我发布了有关检测的问题360度转弯使用加速度计绕其轴的 Android 设备 例如 在横向模式下围绕 y 轴 假设在起始位置 y 值为 0 设备平坦于地面 当手机向前旋转 90 度时y 10 18
  • Context.startForegroundService 然后没有调用Service.startForeground

    这是我的 BroadcastReciever 类 该类处理启动电话状态 Code public class BroadCastRecieverBoot extends BroadcastReceiver Override public vo
  • 使用 ViewPager 从 Activity 到 Fragment 的通信

    我有一个 Activity 和两个 Fragmentstablayout含有一个viewpager 现在我可以通过实现谷歌的指南回调接口从片段到活动进行通信 但我怎样才能以另一种方式沟通从活动到片段 如果活动中发生了一些事情 外部事件 我想
  • SDK 管理器缺少模拟器的旧版 Android 系统映像

    我刚刚重新安装了 ADT 捆绑包 20130522 和 Android Studio 因为我的 eclipse 安装再次搞砸了 但那是另一个故事了 在任一版本中 当我启动 SDK Manager 时 都没有任何 2 2 的系统映像 只有 2
  • 使用 HashMap 映射 String 和 int

    我有一个显示国家 地区名称的列表视图 我已将名称作为字符串数组存储在 strings xml 中 称为国家 地区名称 在填充 ListView 时 我使用从 strings xml 读取的 ArrayAdapter String count
  • 为什么Android room不建议使用allowMainThreadQueries()?

    我正在创建一个小型应用程序 仅在数据库中保存一些计数器 如果不存在 请插入一个 如果是的话 增加更新 该应用程序没有任何用户界面 它是一个保存和读取数据 少量表 少量记录 的插件 我可以用吗允许主线程查询 在这种情况下 每次我读到一些关于这
  • 检测Android N版本代码

    是否可以检测用户是否运行 Android N 我有一台装有 Android N 开发者预览版的 Nexus 6 如果我尝试获取构建版本Build VERSION SDK INT 它返回 23 等于 Android Marshmallow Q
  • Android 偏好设置中的“是”或“否”确认[重复]

    这个问题在这里已经有答案了 我需要在 设置 中实现 重置 选项 单击该设置后 将打开一个简单的对话框 要求确认 我看过了DialogPreference但我似乎无法在任何地方找到好的解决方案或教程 有人可以帮我吗 我是初学者 想法甚至代码都
  • Gradle 构建过程失败

    我的项目正在成功构建 突然我在 Android studio 中收到以下错误 无法找到方法 org gradle api publish maven internal publication MavenPublicationInternal
  • 如何将webview内容划分为多个页面

    我必须使用 Android 上的 PdfDocument 从 webView 创建 PDF https developer android com reference android graphics pdf PdfDocument htm
  • Android 中的处理程序到处理程序与 Messenger 到 Messenger 通信

    问题 使用起来是否 更好 更快且开销更少 Handler http developer android com reference android os Handler html与使用 Handler 通信相比信使 http develop
  • 无法读取第 0 行,第 -1 列

    我正在尝试复制使用 SQLite 管理器创建的数据库 我在其中执行了以下操作 CREATE TABLE android metadata locale TEXT DEFAULT en US and INSERT INTO android m
  • 在异步请求中使用超时回调

    我之前问过这个问题 但我将用提出的解决方案来完成这个问题 并提出另一个问题 我正在使用这个类来进行异步网络请求 http msdn microsoft com en us library system net webrequest aspx
  • 获取接收者的设备令牌以在 Firebase 中发送通知

    所以我正在学习如何使用 firebase 发送设备到设备的通知 我看到了这个answer https stackoverflow com a 42548586 5237289发送通知 看起来很简单 现在 我知道要获取发件人的令牌 它应该如下
  • 通知管理器所需的权限

    我正在尝试使用以下命令将振铃器设置为静音且请勿打扰优先级 AudioManager myAudioMgr AudioManager context getSystemService Context AUDIO SERVICE Notific
  • 如何检查设备上是否安装了电子邮件客户端

    我需要检查设备上是否安装了电子邮件客户端 我使用了以下代码 但它对我不起作用 public boolean isIntentAvailable final PackageManager packageManager getApplicati
  • AsyncTask的并行执行

    An 异步任务单击时执行 List

随机推荐

  • 使用嵌入的 dll 作为资源启动程序时出现问题

    我已经搞定了About com 在 Delphi EXE 中嵌入 dll 的指南 http delphi about com od windowsshellapi l aa012103c htm只要我实际上不使用 DLL 作为外部函数 这似
  • Laravel 5.3 Passport 自定义补助金?

    我知道我不是唯一一个走到这一步的人 有谁知道如何properly在 Laravel 5 3 Passport 中实现自定义授权 Or 有一个很好的链接 教程来参考如何正确执行此操作吗 我知道有这个包 https github com mik
  • 无法让动态 OrderBy 在我的通用列表上工作

    我无法让动态 OrderBy 在我的通用列表上工作 var list CacheObjects CompetencyAssessments Select x gt new CompetencyAssessmentLineViewModel
  • PHP 和 C++ 之间的套接字连接

    我在 PHP 页面和 C 代码之间创建了 TCP 套接字连接 这是这个的 C 代码 服务器 cpp include
  • Stripe JS 在状态更改时发出重复请求和新请求

    我在前端使用 stripe JS 库 只是设置令牌 实际上并没有使用该库来做任何事情 奇怪的是 当我加载任何页面条纹时 都会发出一堆奇怪的请求 其中很多都是重复的 通常它看起来像这样 https m stripe com 4 https m
  • 异步/等待中的重入?

    我有一个按钮 上面有一个async调用异步方法的处理程序 它看起来是这样的 private async void Button1 OnClick object sender RoutedEventArgs e await IpChanged
  • react-native run-android 部署旧版本

    我正在构建一个反应本机 Android 应用程序 我使用 Windows 作为我的开发区域 要将我的应用程序推送到手机 我只需通过 USB 将手机连接到计算机 然后运行命令react native run android 这在我的一部 An
  • xlim 不适用于离散值 [ggplot2]

    我正在尝试使用以下命令在 ggplot put 中设置 xlim 和 ylim ylim c 0 1 5 xlim c 0 100 OR coord cartesian xlim c 0 100 ylim 0 1 5 似乎抛出这个错误 Er
  • Winston 没有将日志写入文件

    我在 Winston 中对错误和警告进行了两次传输 据称这些传输会写入文件 现有的控制台日志记录传输工作正常 我确实检查过pm2 logs并看到了日志 但文件的传输没有说什么 use strict const winston require
  • 评论系统设计

    这是我目前的评论系统设计 我正在为一个有很多区域 博客 教程 手册等的网站开发它 正如应该为每个 tblBlogComments tblTutorialComments 等等 我试图寻求一种适合所有方法的结构 这样 我可以将评论系统变成一个
  • 获取整个语言文件数组

    我是新手拉拉维尔 4 0 如何从中获取整个数组lang en texts php 有没有Lang getAll method 我的目标是在我的基本控制器中生成关键字 描述 将它们填充到主刀片模板中 DO M 的元标记和其他位置 如果我的方法
  • Node.js WebRTC 客户端

    我正在寻找一个webrtc questions tagged webrtc实施node js questions tagged node js传输数据NodeJS 客户端到另一个 webRTC 对等点 所以就我而言 nodejs 应用程序是
  • 更新 Azure VM 规模集上的 VHD

    我已使用 Azure VM 的 vhd 在 Azure 上创建了 VMSS 如何将 VMSS 的源 vhd 更改为新的 vhd Get the following error 我们可以用Update AzureRmVmss and Upda
  • 使用openssl加密和解密小文件

    我想用 C C 编写一个小程序 它读取一个小文本文件 并使用 内部 密钥对其进行加密 然后我还想编写另一个小程序 它可以使用内部相同的密钥解密加密的文件 我查看了 openSSL 网站并用谷歌搜索 但发现不是简单的例子 有人尝试过做这件事吗
  • TypeError:stat:路径应该是字符串、字节、os.PathLike 或整数,而不是 _io.TextIOWrapper

    我在一个python教程网站上找到了以下代码 from nltk tag import StanfordNERTagger stanford classifier open english all 3class distsim crf se
  • Google Places API Android:自动完成关闭得太快

    我将 Place Autocompletion 添加到我的 Android 应用程序中 当我单击按钮时 chooseLocationButton 它会正确打开自动完成小部件 问题是当我想在搜索字段中写一个名字时 单击第一次击键后 自动完成小
  • 如何在 Asp.net 中使用 javascript 检测 IE 11

    您好 我想检测浏览器 IE 8 或更高版本适合我 为此 我使用了以下代码 但它对于 IE 11 失败 对于其他它的检测正确 function getInternetExplorerVersion var rv 1 Return value
  • MVVM 疯狂:命令

    我喜欢MVVM 我不喜欢它 但是喜欢它 大部分都是有道理的 但是 我一直在阅读鼓励您编写大量代码的文章 以便您可以编写 XAML 而不必在代码隐藏中编写任何代码 让我举一个例子 最近 我想将 ViewModel 中的命令连接到 ListVi
  • 在框架外使用 Laravel 4 的 Input 类

    我喜欢 Laravel 4 处理输入的方式 以及如何通过 Input get 获取值 无论它是通过 get post 还是其他方式发送 我正在开发一个不使用 Laravel 作为框架的项目 但如果我可以使用 Input 类 那就太好了 谁能
  • 在 Activity 之上创建一个透明对话框

    背景 我试图在当前活动之上放置一个层 该层将解释当前屏幕上发生的情况 类似于联系 应用程序 https play google com store apps details id com contapps android 我知道有一些解决方