一文搞懂Android主题和样式
1. 概念与作用
1.1 定义与组成
Android Theme是用于定义应用程序或其部分的视觉和界面风格的一种资源。主题在Android中扮演着重要的角色,它们允许开发者统一和自定义应用的外观和感觉。一个主题定义了一组属性集合,这些属性可以是颜色、字体、控件样式等,它们共同构成了应用的视觉表现。
主题由一系列的XML元素和属性组成,这些元素和属性在res/values/styles.xml
文件中定义。每个主题都有一个唯一的名称,并且可以继承自另一个主题,从而方便地重用和扩展现有的主题样式。以下是主题的基本组成:
<style>
标签:定义主题的开始,其中可以包含多个<item>
标签来指定具体的样式属性。<item>
标签:指定单个样式属性,例如android:textColor
、android:background
等。parent
属性:指定主题的父主题,允许主题继承父主题的属性。- 颜色和 drawable 资源:主题中常用的属性类型,用于定义应用的颜色方案和背景图案。
例如,一个简单的主题定义可能如下所示:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item>
</style>
在这个例子中,AppTheme
继承自Theme.AppCompat.Light.DarkActionBar
,并自定义了三个颜色属性。
1.2 作用域
Android主题的作用域可以是整个应用、单个Activity或者某个视图层次结构。这意味着开发者可以根据需要在不同的层级上应用主题,从而实现全局或局部的样式定制。
- 应用级别的主题:在
AndroidManifest.xml
的<application>
标签中设置android:theme
属性,可以为整个应用定义一个统一的主题风格。 - Activity级别的主题:在
AndroidManifest.xml
的<activity>
标签中设置android:theme
属性,可以为特定的Activity定制主题,而不影响其他部分。 - 视图级别的主题:在布局文件中使用
android:theme
属性,可以为特定的视图或视图组设置主题,从而改变其子视图的样式。
例如,在AndroidManifest.xml
中为整个应用设置主题:
<application android:theme="@style/AppTheme">...
</application>
或者为单个Activity设置主题:
<activity android:name=".MainActivity" android:theme="@style/AnotherTheme">...
</activity>
在布局文件中为特定视图设置主题:
<LinearLayoutandroid:theme="@style/ViewTheme"...>...
</LinearLayout>
通过这种方式,Android主题为开发者提供了强大的工具来实现应用的视觉一致性和个性化设计。
2. 主题与样式的区别
2.1 应用范围
Android 中的主题(Theme)和样式(Style)虽然在定义上具有相似的结构,但它们的应用范围和目的存在明显差异。
主题的应用范围:
- 可以应用于整个应用程序(在
AndroidManifest.xml
的<application>
标签中设置)。 - 可以应用于单个
Activity
(在AndroidManifest.xml
的<activity>
标签中设置)。 - 可以应用于特定的视图或视图组(在布局文件中通过
android:theme
属性设置)。
主题通常用于定义应用程序的整体视觉风格,包括颜色方案、字体样式、控件行为等。它们可以在不同的层级上应用,从而实现全局或局部的样式定制。
样式的应用范围:
- 主要应用于单个
View
或ViewGroup
。 - 在布局文件中通过
style
属性为特定的视图设置样式。
样式用于定义单个视图的外观和行为,例如字体颜色、背景颜色、边距和填充等。样式的更改只会影响应用它的视图,而不会影响其他视图或整个应用程序。
2.2 优先级
在Android中,当主题和样式同时应用于一个视图时,它们的优先级决定了最终的显示效果。
-
视图的样式(Style):直接在视图上设置的样式属性具有最高的优先级。这意味着如果一个视图通过
style
属性应用了特定的样式,那么这些样式将覆盖主题中相同的属性。 -
主题中的样式(Theme Style):如果视图没有直接应用样式,那么将使用主题中定义的样式。主题样式是在
styles.xml
文件中定义的,并且可以被应用到整个应用程序、单个Activity
或视图层次结构。 -
默认样式(Default Style):如果既没有为视图指定样式,也没有为主题定义样式,那么将使用Android框架提供的默认样式。
优先级的顺序可以总结为:视图的样式 > 主题样式 > 默认样式。这种优先级结构确保了开发者可以灵活地覆盖和定制应用程序的样式,同时保持了样式的一致性和可维护性。开发者可以根据需要在不同的层级上应用样式和主题,以实现所需的视觉效果和用户体验。
3. 主题的创建与使用
3.1 创建主题
创建Android主题涉及到定义一组属性集合,这些属性集合在res/values/styles.xml
文件中声明。主题的创建可以基于现有的主题,通过继承来扩展或修改其属性,也可以完全自定义一个新的主题。
基于现有主题创建: 开发者可以利用Android系统提供的主题或第三方库主题作为父主题,在此基础上进行扩展。例如,使用Theme.AppCompat
系列主题作为父主题,可以快速地获得Material Design风格的界面元素。
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item>
</style>
完全自定义主题: 如果需要一个与现有主题完全不同的界面风格,开发者可以创建一个不继承任何现有主题的新主题。这通常涉及到定义一组全新的颜色资源、字体样式和其他界面属性。
<style name="CustomTheme"><item name="android:windowBackground">@color/background_custom</item><item name="android:textColor">@color/text_custom</item><item name="android:buttonStyle">@style/CustomButtonStyle</item>
</style>
在上述代码中,CustomTheme
是一个完全自定义的主题,它定义了窗口背景、文本颜色和按钮样式等属性。这些属性将应用于应用的所有视图,除非被更具体的样式或主题覆盖。
3.2 应用主题
创建好主题后,需要在适当的位置应用它,以确保它能够影响应用的界面。应用主题可以通过以下几种方式进行:
应用级主题: 在AndroidManifest.xml
文件中,通过设置<application>
标签的android:theme
属性来应用主题。这种方式会使得整个应用的所有Activity都使用这个主题。
<applicationandroid:theme="@style/AppTheme">...
</application>
Activity级主题: 在AndroidManifest.xml
文件中,通过设置<activity>
标签的android:theme
属性来为特定的Activity应用主题。这允许开发者为不同的Activity设置不同的界面风格。
<activityandroid:name=".MainActivity"android:theme="@style/CustomTheme">...
</activity>
视图级主题: 在布局文件中,通过设置android:theme
属性来为特定的视图或视图组应用主题。这种方式可以使得开发者对应用的某个部分进行样式定制,而不影响其他部分。
<LinearLayoutandroid:theme="@style/CustomTheme"...>...
</LinearLayout>
除了静态地在XML文件中应用主题,Android还允许开发者动态地通过代码来切换主题。这可以通过调用Activity
的setTheme()
方法来实现,通常在onCreate()
方法中设置。
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setTheme(R.style.CustomTheme);setContentView(R.layout.activity_main);
}
通过这种方式,开发者可以根据用户的偏好或应用的不同状态来动态改变应用的主题,从而提供更加丰富的用户体验。
4. 主题属性详解
4.1 颜色属性
Android主题中的颜色属性是定义应用视觉风格的关键元素之一。这些颜色属性通常用于设置应用的背景、文本颜色、控件颜色等。以下是一些常用的颜色属性及其应用:
-
colorPrimary
:用于定义应用的主要颜色,通常作为应用栏(AppBar)的背景颜色。根据Material Design的指导原则,这个颜色应该是品牌相关的颜色,并且在整个应用中保持一致性。例如,一个新闻应用可能将colorPrimary
设置为品牌色,以确保用户在浏览内容时能够识别出应用。 -
colorPrimaryDark
:通常用于状态栏的颜色。在Android 5.0(Lollipop)及以后的版本中,colorPrimaryDark
用于状态栏的背景颜色,以确保状态栏的颜色与应用的主题色相协调。 -
colorAccent
:用于定义应用中的强调颜色,通常用于操作按钮、选择项、开关等控件的激活状态。这个颜色应该与colorPrimary
形成对比,以吸引用户的注意力。 -
android:navigationBarColor
:定义导航栏的背景颜色。在支持导航栏的设备上,这个颜色可以改变导航栏的外观,以匹配应用的主题风格。 -
android:windowBackground
:定义应用窗口的背景颜色。这个颜色通常用于设置应用的默认背景色,可以为应用提供一个统一的视觉背景。
4.2 字体属性
Android主题中的字体属性允许开发者自定义应用中的字体样式,包括字体系列、字重、字号等。以下是一些常用的字体属性:
-
android:textViewStyle
:用于定义TextView
的默认样式,包括字体系列、字重、字号等。通过设置这个属性,开发者可以确保应用中的所有TextView
都遵循一致的字体风格。 -
android:buttonStyle
:用于定义Button
的默认样式,包括字体系列、字重、字号等。这个属性可以确保应用中的所有按钮都具有统一的字体样式。 -
android:editTextStyle
:用于定义EditText
的默认样式,包括字体系列、字重、字号等。这个属性可以确保用户在输入文本时获得一致的字体体验。
4.3 控件相关属性
除了颜色和字体属性,Android主题还提供了一些用于控制控件行为和样式的属性。以下是一些常用的控件相关属性:
-
android:listPreferredItemHeight
:定义列表项的首选高度。这个属性可以用于确保列表项在不同的设备和屏幕尺寸上保持一致的高度。 -
android:actionBarSize
:定义动作栏(ActionBar)的高度。通过设置这个属性,开发者可以确保动作栏在不同的设备和屏幕尺寸上保持一致的尺寸。 -
android:homeAsUpIndicator
:定义导航抽屉(Navigation Drawer)中的“返回首页”图标。这个属性可以用于自定义导航抽屉的行为和样式。
通过合理配置这些属性,开发者可以创建出既美观又符合用户体验的Android应用界面。
5. 系统主题与自定义主题
5.1 系统内置主题
Android系统提供了一系列的内置主题,这些主题旨在为开发者提供快速的样式实现,同时也为应用提供一个一致的用户体验。系统内置主题通常与Material Design紧密集成,确保应用界面的现代化和直观性。
- Material Design 主题:如
Theme.Material
、Theme.Material.Light
、Theme.Material.Dialog
等,这些主题遵循Material Design设计语言,提供了丰富的视觉效果和流畅的动画过渡。 - Holo 主题:虽然在Android 5.0(Lollipop)之后逐渐被Material Design主题取代,但Holo主题如
Theme.Holo
、Theme.Holo.Light
等仍然存在于旧版本的Android系统中,它们提供了一种与众不同的视觉风格。 - 设备默认主题:如
Theme.DeviceDefault
、Theme.DeviceDefault.Light
等,这些主题旨在与设备的外观和感觉保持一致,为开发者提供了一种简单的方式来适配设备制造商的默认设计。
系统内置主题的优势在于它们的广泛兼容性和即时可用性,开发者可以直接在AndroidManifest.xml
中引用这些主题,或者在styles.xml
中继承它们来创建自定义主题。
5.2 自定义主题方法
尽管系统内置主题提供了丰富的样式选择,但在许多情况下,开发者需要根据品牌指南或特定的设计需求来创建自定义主题。以下是创建自定义主题的几种方法:
- 继承系统主题:通过在
styles.xml
中定义新主题并指定一个父主题,开发者可以继承系统主题的属性并进行扩展或覆盖。这种方法的优点是可以保留系统主题的许多默认行为,同时允许进行一定程度的定制。
<style name="CustomTheme" parent="Theme.AppCompat.Light.DarkActionBar"><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item>
</style>
- 完全自定义主题:如果需要彻底改变应用的外观和风格,开发者可以创建一个不继承任何系统主题的新主题。这涉及到定义所有颜色、字体、控件样式等属性,以确保应用的一致性和个性化。
<style name="CustomTheme" ><item name="android:windowBackground">@color/background_custom</item><item name="android:textColor">@color/text_custom</item><item name="android:buttonStyle">@style/CustomButtonStyle</item>
</style>
- 动态主题切换:为了提供更好的用户体验,开发者可以实现动态主题切换功能,允许用户在运行时更改应用的主题。这通常涉及到在代码中动态设置主题,或者使用SharedPreferences来存储用户的主题选择,并在应用启动时应用。
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (userPrefersDarkTheme) {setTheme(R.style.DarkTheme);} else {setTheme(R.style.LightTheme);}setContentView(R.layout.activity_main);
}
自定义主题为开发者提供了无限的创造空间,使他们能够设计出独特且吸引人的应用界面。然而,这也要求开发者对Android的样式和主题系统有深入的理解,并能够精心设计和实现每一个细节。
6. 深色主题支持
6.1 深色主题优势
深色主题在Android平台上的引入,不仅丰富了用户的视觉体验,还带来了一系列实际优势,这些优势在用户体验和设备性能方面都有所体现。
-
节能降耗:根据Android开发者文档,深色主题能够在OLED屏幕上实现更大幅度的电量节省。由于OLED屏幕的每个像素点都能独立发光,因此在显示深色内容时,可以通过关闭更多的像素来达到节能效果。实验数据显示,在OLED屏幕上使用深色主题,相较于浅色主题,能够节省大约41%的电量消耗。
-
改善可视性:深色主题为弱视和对强光敏感的用户提供了更好的可视性。在光线较暗的环境中,深色背景能够减少屏幕发出的亮光对眼睛的刺激,从而降低视疲劳的风险,提高阅读和使用的舒适度。
-
增强用户体验:深色主题提供了一种更为柔和的视觉体验,尤其在夜间或暗光环境下,能够减少屏幕亮度对用户眼睛的刺激,提升整体的用户体验。此外,深色主题的一致性也有助于减少用户在不同应用间切换时的视觉不适。
6.2 实现深色主题
在Android平台上实现深色主题,开发者可以采取多种方法,以确保应用界面在深色模式下的表现和兼容性。
-
使用系统提供的深色主题:Android 10及以上版本提供了系统级的深色主题支持。开发者可以通过设置应用的主题为
Theme.AppCompat.DayNight
或Theme.MaterialComponents.DayNight
,使应用能够根据系统设置自动切换到深色主题。 -
自定义深色主题资源:为了适配深色主题,开发者需要为应用中的各种颜色属性定义深色模式下的对应资源。这通常涉及到在
res/values-night
目录下创建对应的颜色资源文件,并定义适用于深色背景的颜色值。 -
利用Force Dark功能:Android 10引入了Force Dark功能,该功能能够自动将应用的浅色主题转换为深色主题。通过在应用主题中设置
android:forceDarkAllowed="true"
,系统会自动调整视图的颜色,以适应深色背景。然而,Force Dark可能不适用于所有情况,特别是在需要精确控制颜色和样式的场景下,开发者可能需要手动进行适配。 -
动态切换主题:开发者还可以实现根据用户偏好动态切换主题的功能。这可以通过编程方式在运行时更改Activity的Theme,或者使用SharedPreferences来存储用户的主题选择,并在应用启动时应用。
-
测试和优化:在实现深色主题后,开发者需要对应用进行充分的测试,确保在深色模式下,应用的所有元素都能正确显示,且不影响用户体验。这可能涉及到对布局、颜色、图标和字体等各方面的调整和优化。
通过上述方法,开发者可以确保应用在深色模式下提供良好的用户体验,同时充分利用深色主题带来的优势。
7. Material Design 3 (Material You)
7.1 动态颜色功能
Material Design 3(Material You)的核心特性之一是动态颜色功能,这一功能通过从用户的壁纸中提取颜色来生成应用的主题颜色,从而为用户提供更加个性化的视觉体验。动态颜色不仅增强了应用的美观度,还有助于保持品牌识别度和用户界面的一致性。
动态颜色的工作原理如下:
- 系统算法分析用户选定的壁纸,提取出关键颜色。
- 这些关键颜色随后扩展成一个由13种不同色调组成的调色板,以适应不同的设计场景和组件需求。
- 每个色调都可以根据应用的需要进行调整,以确保在不同设备和光照条件下都能保持良好的可读性和美观度。
- 动态颜色能够适应日间和夜间模式的变化,自动调整色调以适应用户的使用环境。
根据用户的研究和反馈,动态颜色功能在Android 12及以上版本的设备中得到了广泛的应用,它不仅提升了用户体验,还使得应用界面更加生动和富有表现力。例如,一项用户调查显示,超过70%的用户认为动态颜色使得他们的设备更加个性化,同时也更容易与其他用户区分开来。
7.2 主题生成器工具
为了帮助开发者和设计师更容易地实现Material You的设计语言,Google提供了一系列的主题生成器工具。这些工具允许用户通过简单的图形界面来选择和定制颜色、字体和形状等设计元素,从而快速生成符合Material Design 3规范的主题。
主题生成器工具的主要特点包括:
- 可视化操作:用户可以通过拖放和颜色选择器来直观地选择和调整主题颜色,无需手动编写代码。
- 实时预览:工具提供实时预览功能,用户可以立即看到更改设计元素后的效果,确保所选颜色和样式符合预期。
- 多平台支持:主题生成器工具支持Android、Web和Flutter等多个平台,使得跨平台应用的开发更加便捷。
- 代码导出:用户在完成主题设计后,可以将生成的主题导出为代码,直接应用到项目中,支持XML、CSS和Compose等多种格式。
例如,Material Theme Builder是一个流行的在线工具,它允许用户选择不同的颜色方案,并生成对应的Material You主题。用户可以通过这个工具来定制Primary、Secondary和Tertiary等颜色,以及选择不同的字体和形状风格。完成设计后,用户可以下载生成的主题代码,并将其应用到自己的项目中。
根据开发者社区的反馈,这些主题生成器工具极大地简化了Material You主题的创建过程,提高了开发效率,并且帮助设计师和开发者更好地遵循Material Design的设计原则。
8. 总结
本篇介绍了Android中的主题(Theme)和样式(Style)的概念、作用及其区别。主题用于定义应用的整体视觉风格,影响整个应用或特定Activity的外观,而样式则主要应用于单个视图,定义其外观属性。也还探讨了如何创建和应用主题,强调了动态主题支持的重要性,尤其是在深色模式下的应用。此外,还提到了Material Design 3(Material You)的动态颜色功能,强调其个性化和用户体验的提升。通过合理使用主题和样式,开发者可以创建一致且吸引人的用户界面。
相关文章:

一文搞懂Android主题和样式
1. 概念与作用 1.1 定义与组成 Android Theme是用于定义应用程序或其部分的视觉和界面风格的一种资源。主题在Android中扮演着重要的角色,它们允许开发者统一和自定义应用的外观和感觉。一个主题定义了一组属性集合,这些属性可以是颜色、字体、控件样式…...

360与重庆科技大学战略携手,为数字中国建设输送实战人才
近日,360数字安全集团与重庆科技大学正式签订了战略合作协议,双方将围绕创新人才培养、科研技术攻关、专业实验室共建、车联网安全以及社会服务等多个维度展开深度合作,共同打造数字安全人才培养新高地,为数字重庆的建设与发展注入…...

基于异常合成的图像异常检测方法
基于异常合成的图像异常检测方法 基于异常合成思路实现图像异常检测的方法,它们的核心思路是: 试图通过合成异常样本穷尽所有可能出现的异常类型,从而将无监督的异常检测(one class classification)建模为一个全监督…...

机器学习方向在算法优化上有哪些创新点?
以下是机器学习算法优化方面的一些创新点: 一、优化算法自身的改进 随机梯度下降(SGD)的变体 Adagrad 传统的随机梯度下降算法使用固定的学习率,而Adagrad根据每个参数的历史梯度信息自适应地调整学习率。对于稀疏数据,它可以为不同的参数分配不同的学习率,使得频繁出现…...

基于yolov8的道路交通事故检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
【算法介绍】 基于YOLOV8的道路交通事故检测系统是一种先进的智能交通监控解决方案,它利用YOLOV8这一前沿的目标检测算法,实现对交通事故的高效、实时检测。 该系统结合了自定义的道路交通事故数据集,对YOLOV8模型进行了针对性的训练与优化…...

HttpUtils 详解
一、详解 1.1 介绍 现如今的 Web 项目,由服务端向外发起网络请求的场景,基本上随处可见! 传统情况下,在服务端代码里访问 http 服务时,一般会使用 JDK 的 HttpURLConnection 或者 Apache 的 HttpClient,不…...

云计算第四阶段: cloud二周目 07-08
cloud 07 一、k8s服务管理 创建服务 # 资源清单文件 [rootmaster ~]# kubectl create service clusterip websvc --tcp80:80 --dry-runclient -o yaml [rootmaster ~]# vim websvc.yaml --- kind: Service apiVersion: v1 metadata:name: websvc spec:type: ClusterIPselector…...

智能合约开发工具Remix
不久前,我在B站、视频号和 YouTube 都陆续发布了新的一套免费视频课程《智能合约开发工具Remix》,总共分为了 9 个小节的视频,以下分别是这 9 个小节在 B 站的视频链接,喜欢直接看视频的伙伴可以去 B 站观看: 概况文件…...

YYF桌面 1.2 | 个性化桌面体验,清爽美观。
YYF桌面是一款经过定制的安卓桌面启动器,此版本基于1.2版本进行了一系列个性化修改。主界面快捷图标进行了美化处理,并采用了清爽半透明的图标背景。取消了底部快捷键,并重新制作了“全部应用”按钮,保留了动态效果。修改了右上角…...

【人工智能/计算机工程/大数据】第五届人工智能与计算工程国际学术会议(ICAICE 2024,2024年11月8-10日)
The 5th International Conference on Artificial Intelligence and Computer Engineering 第五届人工智能与计算工程国际学术会议(ICAICE 2024) 会议官网:www.event-icaice.org The 5th International Conference on Artificial Intellige…...

uni-app录音功能
纯纯干货,cv即用 <template><!-- 录音页面 --><view class"page"><view class"tape_box"><view class"upload_box1"><view class"upload_top"><view class"upload_img_title…...

C语言【调试】(个人笔记版)
调试 前言一、Bug二、调试工具1.DeBug2.Release 三、调试快捷键1、断点 四、调试时查看程序的当前信息1、查看临时变量2、查看内存3、查看调用堆栈、汇编、寄存器 总结 前言 这篇文章大都是我的个人笔记: 调试在日常程序设计中是很重要的。调试说白了就是为了解决代…...

连锁收银系统
商淘云连锁管理系统助力连锁企业实现“人货账”全方位数字化管理,它依托连锁品牌进销存管理实现门店订货、线下收银、线上商城、会员营销等一体化管理。 门店订货补货支持连锁直营、加盟 不同门店不同进货价、不同门店不同商品、不同门店在线或者账期支付、门店PC或…...

5.2024.10.21
2024.10.21 学习和复习 学习QT的流程控制、函数、内联函数复习C语言printf练习 问题及解决方案 C学到函数之后有些吃力代码逻辑能力不大行,需要巩固一下C语言基础再挤多点时间去学习嵌入式写代码前先把大概思路写出来 碎碎念 最近作业比较多,有点静不下…...

前端Socket互动小游戏开发体验分享
随着实时网络通信技术的不断发展,基于WebSocket的前端互动小游戏成为了一种非常流行的选择。WebSocket允许客户端和服务器之间进行双向通信,为游戏互动带来了更快的响应时间和更流畅的体验。本文将通过一个简单的互动小游戏来探讨前端如何利用WebSocket技…...

react项目,通过自定义 separator 属性来修改日期选择器中间的分隔符:
1. 引入必要的依赖 确保你已经引入了 DatePicker 组件和 moment 库。 import React, { Component } from react; import { DatePicker } from antd; import moment from moment; const { RangePicker } DatePicker; const dateFormat "YYYY/MM/DD"; 2. 定义父组…...

双十一有啥好用的家居好物推荐?2024性价比高的超声波清洗机推荐
双十一今天晚上就可以越热开抢了,还不知道购买什么物品的小伙伴们赶紧来看看我这篇文章,在众多家居好物中,超声波清洗机以其高效、便捷的特点,成为了许多家庭的必备神器。2024年,市场上涌现出了不少性价比超高的产品&a…...

比亚迪车机安装第三方应用教程
比亚迪车机安装第三方应用教程 比亚迪车机U盘安装APP, 无论是dlink3.0还是4.0都是安卓系统,因此理论上安卓应用是都可以安装的,主要就是横屏和竖屏的区别。在比亚迪上安装软件我主要推荐两种方法。 第一种,直接从电脑端下载安装布…...

移动零---双指针法
目录 一:题目 二:算法原理讲解 三:代码编写 一:题目 题目链接:https://leetcode.cn/problems/move-zeroes/description/ 二:算法原理讲解 三:代码编写 void moveZeroes2(vector<int>& nums) {for (int d…...

MoeCTF 2024 ---Misc方向WP
安全杂项 signin 题目描述: xdsec的小伙伴们和参赛者来上课,碰巧这一天签到系统坏了,作为老师的你,要帮他们 教师代签。 特殊提醒:luo同学今天好像在宿舍打游戏,不想来上课,这是严重的缺勤行为…...

【我的 RT 学习手札】信息收集
相关笔记整理自B站up主泷羽sec全栈渗透测试教学(免费) 视频链接为泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频 笔记只是方便师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线࿰…...

CMake变量:CMAKE_FIND_LIBRARY_SUFFIXES
CMAKE_FIND_LIBRARY_SUFFIXES是CMake中的一个变量,用于指定在查找库文件时使用的后缀列表。当CMake需要找到库文件时,它会尝试在这些后缀后添加库名来构建库文件的完整路径。例如,如果库名为mylib,并且CMAKE_FIND_LIBRARY_SUFFIXE…...

在使用 RabbitMQ 作为消息代理时,多个 Celery 实例(或应用)可以共享同一个 RabbitMQ 实例
在使用 RabbitMQ 作为消息代理时,多个 Celery 实例(或应用)可以共享同一个 RabbitMQ 实例。这样做可以简化基础设施管理,同时允许不同的 Celery 应用之间进行消息传递和协作。下面是如何配置多个 Celery 实例以使用同一个 RabbitM…...

ARM在嵌入式开发中的作用有哪些?
ARM在嵌入式开发中的作用主要体现在以下几个方面: 架构优势: ARM架构基于RISC(精简指令集计算机),具有精简而高效的指令集,适合资源受限的环境。低功耗设计使得ARM处理器在移动设备和嵌入式系统中非常受欢…...

-webkit-box-orient属性丢失?
在实际项目场景当中,我们经常会遇到需要对超长文本溢出省略的场景: 我们经常会这样写—— 单行省略: overflow: hidden; //文本溢出隐藏text-overflow: ellipsis; //文本溢出显示省略号white-space: nowrap; //不换行 多行省略:…...

openKylin系统SSH服务配置结合cpolar轻松实现开放麒麟远程连接
前言 本文主要介绍如何在openKlyin系统中设置ssh连接,并结合cpolar内网穿透工具实现远程也可以ssh连接本地局域网内部署的openKlyin系统. openKylin是中国首个基于Linux 的桌面操作系统开发者平台,通过开放操作系统源代码的方式,打造具有自…...

我的世界之合成
合成(Crafting)是一种在Minecraft中获得多种方块、工具和其他资源的方法。合成时,玩家必须先把物品从物品栏移入合成方格中。22的简易合成方格可以直接在物品栏中找到,而33的合成方格需要使用工作台或合成器来打开。 目录 1合成系…...

java基于SpringBoot+Vue+uniapp微信小程序的自助点餐系统的详细设计和实现(源码+lw+部署文档+讲解等)
项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…...

AI 编译器学习笔记之八 -- Python基础学习
2、正则表达式 re.sub 正则替换:cleaned_text re.sub(r"[^\w\s]", "", text) - CSDN文库 3、在Python中,shape 是一个用于描述数组维度的属性,通常用在NumPy数组对象上,而不是标准的列表。 【Python】解决Py…...

盘点近几年腾讯的精选面试题(c/c++研发岗)
map插入方式有几种? 1)用insert函数插入pair数据, mapStudent.insert(pair<int, string>(1, “student_one”)); 2)用insert函数插入value_type数据 mapStudent.insert(map<int, string>::value_type (1, “student_one”)); 3)在insert函…...