Android小技巧之如何构建完全透明的Activity

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android小技巧之如何构建完全透明的Activity相关的知识,希望对你有一定的参考价值。

参考技术A

一个完全透明的Activity有很多用处,比如在应用启动的时候,可以用它处理根据用户是否登录的状态来跳转相应界面的情况,实际上微信启动的时候就是做了这种效果、或者在Server检测版本更新的时候弹出它来显示对话框,也可以变出很多花样来巧妙的解决不同的需求,而要实现这样的一个Activity是非常的简单的,我们只需要一个样式就能完美解决:

theme.xml 中添加:

AndroidManifest.xml 中给你的Activity设置一下theme:

启动一下这个Activity,是不是什么都看不见,就只能看到桌面。

感谢各位读者,喜欢的话点个赞吧,有哪里不懂的也可以在下方留言。:)

具有完全透明背景的 qt 小部件

【中文标题】具有完全透明背景的 qt 小部件【英文标题】:A qt widget with fully transparent background 【发布时间】:2010-11-25 15:43:31 【问题描述】:

我需要创建一个 qt 小部件,它将充当其他一些小部件的父级,并对它们进行排序。

现在的问题是如何让它的背景完全透明?

我想这样做:

struct Imp

  Imp( QWidget *parent ) : thisWidget( new QWidget( parent ) )
  
    thisWidget->setAttribute( Qt::WA_TranslucentBackground, true );
  

  QWidget *thisWidget;
;

你认为我需要设置属性,还是没有它会正常工作?

【问题讨论】:

你真的需要一个透明背景,还是有一个没有背景就足够了?这是一个真正的区别:在透明背景下,操作系统会告诉 underlying 窗口绘制像素。没有背景,操作系统只希望孩子们绘制整个窗口。 @MSalters 这个小部件被放置在一个窗口中,并且只有这个小部件的子小部件应该是可见的。应该看到这个小部件后面的任何东西(如果没有被子小部件覆盖)。 我不确定我是否理解这个问题...在 Qt4 中默认情况下,QWidget 不会为自己的背景绘制任何内容,只会绘制其子项。 @Caleb 是的,这似乎是正确的答案。你为什么以评论的形式回答? Make QWidget transparent的可能重复 【参考方案1】:

在 Qt4 中默认情况下,QWidget 不会为自己的背景绘制任何内容,只会绘制其子项。如果您想覆盖它,您必须特别告诉小部件通过其属性之一绘制其背景。请注意,从 QWidget 派生的一些小部件会自动绘制背景。

【讨论】:

如果我只想取消之前设置的背景(backgroundRole)。 @TomášZato:查询和记住以前的设置并使用它来恢复它的最简单方法。更难的方法之一是查询小部件的父级,获取父级的背景角色,并将其设置在小部件上。如果您需要将调色板的其余部分保持原样,所有这一切都很复杂。【参考方案2】:

您应该能够通过更改小部件的样式来完成您需要的所有绘图自定义

MyWidget background-color: none;

应该可以,样式表可以很容易地在设计器中测试

【讨论】:

如果你在 QLineEdit 上这样做,它会将背景从透明变为白色(我使用 PyQt),甚至不需要。有趣的效果。但我同意大多数时候使用 qss 很舒服。 background-color of "none" 对我不起作用,但 "transparent" 对我有用。【参考方案3】:

对我有用的解决方案(我正在为 QTextEditor 设置透明背景):

auto editorPalette = editorWidget->palette();
editorPalette.setColor(QPalette::Active, QPalette::Base, Qt::transparent);
editorPalette.setColor(QPalette::Inactive, QPalette::Base, Qt::transparent);
editorWidget->setPalette(editorPalette);

【讨论】:

【参考方案4】:

你可能想看看:

setAttribute( Qt::WA_NoSystemBackground, true );

setAttribute( Qt::WA_OpaquePaintEvent, false );

【讨论】:

【参考方案5】:

不知道它是否完全解决了你的问题,但它是discussed in this article

文档位于http://doc.qt.nokia.com/4.1/qwidget.html#transparency-and-double-buffering

解决方案适用于 Qt4.1,但应该是相关的。

【讨论】:

从第一个链接开始,他们谈到了使用 setBackgroundRole(QPalette::NoRole)。你认为它会起作用吗?

以上是关于Android小技巧之如何构建完全透明的Activity的主要内容,如果未能解决你的问题,请参考以下文章

Android开发之补间动画

SwiftUI 小技巧之设置SF Symbols图标多彩颜色

你可能不知道的 Android Studio 小技巧之「多行编辑」

具有完全透明背景的 qt 小部件

android小技巧之点击两次退出活动

如何让 Flutter 应用在​​ android 导航栏后面绘制并使导航栏完全透明?