Android View 设置背景方式全解析
一、整体概述
在 Android 开发中,视图(View)的背景设置是构建用户界面的重要组成部分。一个合适的背景可以提升界面的美观度,增强用户体验。从简单的纯色背景到复杂的动态效果,背景设置不仅影响界面美观,还与性能优化和内存管理密切相关。本文将从多个维度深入探讨 Android View 设置背景的方式,包括 XML 配置、代码动态设置、不同 Drawable 类型的使用、高级技巧等,并结合源码分析和实际案例给出最佳实践。
二、XML 布局文件中的背景设置
在 XML 布局文件中设置背景是最常用的方式之一,通过 android:background
属性可以快速为 View 配置背景。这种方式的优点是直观、易于维护,并且可以在设计阶段就确定界面的基本样式。
2.1 基本用法
<TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/colorPrimary"android:text="Hello World"/>
-
属性说明:
android:layout_width
和android:layout_height
:定义视图的宽度和高度,这里设置为match_parent
和wrap_content
是常见的布局方式。android:background
:用于设置视图的背景,属性值可以是颜色值、Drawable 资源或选择器。android:text
:设置 TextView 显示的文本内容。
2.2 不同 Drawable 类型的 XML 定义
2.2.1 颜色背景(ColorDrawable)
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><!-- 定义填充颜色为粉色 --><solid android:color="#FF4081"/>
</shape>
- 描述:
bitmap
标签用于设置图片背景,android:src
指定要显示的图片资源。android:tileMode
可以设置图片的平铺模式,如repeat
(重复)、clamp
(拉伸)等。android:gravity
用于设置图片在视图中的对齐方式。 - 适用场景:当需要使用图片作为背景,并且可能需要对图片进行平铺或拉伸处理时使用。
2.2.3 形状背景(ShapeDrawable)
<shapexmlns:android="http://schemas.android.com/apk/res/android"<!-- 指定形状为椭圆形 -->android:shape="oval"><!-- 定义填充颜色为黄色 --><solid android:color="#FFEB3B"/><!-- 设置形状的宽度和高度 --><sizeandroid:width="50dp"android:height="50dp"/>
</shape>
- 描述:
shape
标签定义形状,android:shape
指定形状类型为oval
(椭圆形)。solid
标签设置填充颜色,size
标签设置形状的大小。 - 适用场景:用于创建简单的几何形状背景,如圆形按钮、椭圆形图标等。
2.2.4 层叠背景(LayerDrawable)
<layer-listxmlns:android="http://schemas.android.com/apk/res/android"><!-- 第一个图层,使用指定的背景资源 --><item android:drawable="@drawable/background_layer1"/><!-- 第二个图层,使用指定的背景资源 --><item android:drawable="@drawable/background_layer2"/>
</layer-list>
- 描述:
layer-list
标签用于创建层叠背景,item
标签表示一个图层,每个图层可以使用不同的 Drawable 资源。图层的顺序从上到下依次叠加。 - 适用场景:当需要将多个背景元素叠加在一起显示时使用,如在图片上叠加一个半透明的遮罩层。
2.2.5 状态选择器(StateListDrawable)
<selectorxmlns:android="http://schemas.android.com/apk/res/android"><!-- 当按钮被按下时,使用此 Drawable 作为背景 --><item android:drawable="@drawable/button_pressed" android:state_pressed="true"/><!-- 默认状态下,使用此 Drawable 作为背景 --><item android:drawable="@drawable/button_normal"/>
</selector>
- 描述:
selector
标签用于创建状态选择器,根据视图的不同状态(如按下、选中、禁用等)显示不同的背景。item
标签表示一个状态对应的 Drawable,android:state_pressed
等属性用于指定状态。 - 适用场景:常用于按钮等交互元素,根据用户的操作显示不同的背景效果,增强交互反馈。
2.3 XML 背景的解析流程
当 Android 系统解析 XML 布局时,会通过 AttributeSet
获取 android:background
属性值,并调用 View
的构造函数进行初始化:
public View(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {// 从上下文中获取 TypedArray 对象,用于解析 XML 属性TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.View, defStyleAttr, defStyleRes);// 从 TypedArray 中获取背景 DrawableDrawable background = a.getDrawable(com.android.internal.R.styleable.View_background);// 设置视图的背景setBackground(background);// 回收 TypedArray 对象,避免内存泄漏a.recycle();
}
-
解析过程:
- 通过
context.obtainStyledAttributes
方法获取TypedArray
对象,该对象包含了 XML 中定义的所有属性。 - 使用
a.getDrawable
方法从TypedArray
中获取背景 Drawable。 - 调用
setBackground
方法将获取到的 Drawable 设置为视图的背景。 - 最后调用
a.recycle
方法回收TypedArray
对象,释放资源。
- 通过
三、代码动态设置背景
在 Java/Kotlin 代码中动态设置背景可以实现更灵活的交互逻辑,例如根据用户的操作或应用的状态实时改变视图的背景。
3.1 基本方法
// Java 代码示例
// 通过资源 ID 设置背景
view.setBackgroundResource(R.drawable.custom_bg);
// 通过 Drawable 对象设置背景
view.setBackgroundDrawable(getResources().getDrawable(R.drawable.custom_bg));// Kotlin 代码示例
// 通过资源 ID 设置背景
view.setBackgroundResource(R.drawable.custom_bg)
// 通过 Drawable 对象设置背景
view.setBackgroundDrawable(resources.getDrawable(R.drawable.custom_bg, null))
-
方法说明:
setBackgroundResource
:通过资源 ID 设置背景,系统会自动加载对应的 Drawable 资源。setBackgroundDrawable
:通过 Drawable 对象设置背景,需要先从资源中获取 Drawable 对象。
3.2 API 版本差异
setBackgroundDrawable()
:在 API 16 及以上版本中已过时,不建议使用。setBackground()
:推荐使用的通用方法,内部会根据 API 版本选择合适的实现:
public void setBackground(Drawable background) {if (background == null) {// 如果背景为空,调用 setBackgroundDrawable 设置为空setBackgroundDrawable(null);} else {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {// 在 API 16 及以上版本,调用 setBackgroundDrawable 设置背景setBackgroundDrawable(background);} else {// 在 API 16 以下版本,同样调用 setBackgroundDrawable 设置背景setBackgroundDrawable(background);}}
}
- 兼容性处理:由于
setBackgroundDrawable
在高版本中已过时,使用setBackground
方法可以确保代码在不同 API 版本上的兼容性。
3.3 动态切换背景
// 为按钮设置触摸监听器,根据触摸状态动态切换背景
button.setOnTouchListener { v, event ->when (event.action) {// 当按钮被按下时,设置按下状态的背景MotionEvent.ACTION_DOWN -> v.setBackgroundResource(R.drawable.button_pressed)// 当按钮被抬起时,设置默认状态的背景MotionEvent.ACTION_UP -> v.setBackgroundResource(R.drawable.button_normal)}false
}
-
- 实现原理:通过为按钮设置
OnTouchListener
,监听触摸事件的ACTION_DOWN
和ACTION_UP
状态,根据不同状态调用setBackgroundResource
方法切换背景。
- 实现原理:通过为按钮设置
四、Drawable 类型与使用场景
4.1 ColorDrawable
- 特点:纯色填充,只包含单一颜色,不包含任何图形或图像信息。
- 适用场景:适用于需要简单纯色背景的情况,如设置整个界面的背景色、按钮的默认背景色等。
- 内存占用:约 1KB(固定开销),由于只存储单一颜色信息,内存占用非常小。
4.2 BitmapDrawable
- 特点:支持图片缩放、平铺、拉伸等操作,可以根据需要对图片进行处理以适应不同的视图大小和布局要求。
<bitmapandroid:gravity="center"android:tileMode="repeat"android:antialias="true"/>
android:gravity
:设置图片在视图中的对齐方式,如center
表示居中对齐。android:tileMode
:设置图片的平铺模式,repeat
表示重复平铺。android:antialias
:开启抗锯齿功能,使图片边缘更加平滑。
4.3 ShapeDrawable
- 属性说明:
属性 描述 android:shape
形状(rectangle/oval/line),指定形状的类型,如矩形、椭圆形或线条。 solid
填充颜色,设置形状内部的填充颜色。 stroke
边框,设置形状的边框颜色、宽度等属性。 padding
内边距,设置形状内部内容与边框之间的间距。
4.4 LayerDrawable
<layer-list><!-- 第一个图层,设置 ID 并指定 Drawable 资源 --><item android:id="@+id/background" android:drawable="@drawable/bg_layer1"/><!-- 第二个图层,设置 ID 并指定 Drawable 资源 --><item android:id="@+id/foreground" android:drawable="@drawable/bg_layer2"/>
</layer-list>
- 层级关系:图层的顺序从上到下依次叠加,后面的图层会覆盖前面的图层。可以通过
android:id
属性为每个图层指定唯一的 ID,方便在代码中进行操作。
4.5 StateListDrawable
<selector><!-- 当视图被选中时,使用此 Drawable 作为背景 --><item android:drawable="@drawable/button_selected" android:state_selected="true"/><!-- 当视图被按下时,使用此 Drawable 作为背景 --><item android:drawable="@drawable/button_pressed" android:state_pressed="true"/><!-- 默认状态下,使用此 Drawable 作为背景 --><item android:drawable="@drawable/button_normal"/>
</selector>
- 状态判断:根据视图的不同状态(如
state_selected
、state_pressed
等)显示不同的背景。注意状态的顺序很重要,高优先级的状态应该放在前面。
五、高级背景设置技巧
5.1 自定义 Drawable
class GradientDrawable : Drawable() {// 创建一个抗锯齿的画笔private val paint = Paint(Paint.ANTI_ALIAS_FLAG)// 定义渐变的起始颜色为红色private var startColor = Color.RED// 定义渐变的结束颜色为蓝色private var endColor = Color.BLUEoverride fun draw(canvas: Canvas) {// 创建一个线性渐变着色器val shader = LinearGradient(0f, 0f, bounds.width().toFloat(), bounds.height().toFloat(),startColor, endColor, Shader.TileMode.CLAMP)// 将着色器应用到画笔上paint.shader = shader// 在画布上绘制矩形,使用渐变填充canvas.drawRect(bounds, paint)}override fun setAlpha(alpha: Int) {// 设置画笔的透明度paint.alpha = alpha}override fun getOpacity(): Int {// 返回 Drawable 的不透明度return PixelFormat.TRANSLUCENT}override fun setColorFilter(colorFilter: ColorFilter?) {// 设置画笔的颜色过滤器paint.colorFilter = colorFilter}
}
-
自定义过程:
- 创建一个继承自
Drawable
的类,并重写draw
、setAlpha
、getOpacity
和setColorFilter
等方法。 - 在
draw
方法中,使用Canvas
和Paint
进行绘制操作,这里创建了一个线性渐变并填充矩形。 setAlpha
方法用于设置透明度,getOpacity
方法返回 Drawable 的不透明度,setColorFilter
方法用于设置颜色过滤器。
- 创建一个继承自
5.2 动画背景
// 创建自定义的渐变 Drawable
val gradientDrawable = GradientDrawable()
// 将渐变 Drawable 设置为按钮的背景
button.setBackground(gradientDrawable)// 创建一个颜色动画,从红色渐变到蓝色
ValueAnimator.ofArgb(Color.RED, Color.BLUE).apply {// 设置动画时长为 3000 毫秒duration = 3000// 添加动画更新监听器addUpdateListener { animation ->// 获取当前动画的颜色值gradientDrawable.startColor = animation.animatedValue as Int// 使按钮重新绘制,更新背景button.invalidate()}// 启动动画start()
}
-
实现原理:
- 创建一个自定义的
GradientDrawable
并设置为按钮的背景。 - 使用
ValueAnimator
创建一个颜色动画,从红色渐变到蓝色。 - 在动画更新监听器中,获取当前动画的颜色值并更新
GradientDrawable
的起始颜色,然后调用invalidate
方法使按钮重新绘制,实现动画效果。
- 创建一个自定义的
5.3 矢量图与自适应图标
<vectorxmlns:android="http://schemas.android.com/apk/res/android"<!-- 设置矢量图的宽度 -->android:width="24dp"<!-- 设置矢量图的高度 -->android:height="24dp"<!-- 设置矢量图的视口宽度 -->android:viewportWidth="24"<!-- 设置矢量图的视口高度 -->android:viewportHeight="24"><!-- 定义一个路径,使用 SVG 路径数据 --><pathandroid:pathData="M12,2C6.5,2 2,6.5 2,12s4.5,10 10,10 10,-4.5 10,-10S17.5,2 12,2z M12,20c-4.4,0 -8,-3.6 -8,-8s3.6,-8 8,-8 8,3.6 8,8 -3.6,8 -8,8z"<!-- 设置路径的填充颜色 -->android:fillColor="#FF4081"/>
</vector>
-
特点:
- 矢量图可以无损缩放,不会因为放大或缩小而失真,适合在不同分辨率的设备上使用。
- 自适应图标可以根据不同的设备和主题自动调整显示效果,提供一致的用户体验。
六、性能优化与内存管理
6.1 背景重复使用
// 从资源中获取共享的 Drawable 对象
val sharedDrawable = ContextCompat.getDrawable(context, R.drawable.common_bg)
// 将共享的 Drawable 设置为 view1 的背景
view1.setBackground(sharedDrawable)
// 将共享的 Drawable 设置为 view2 的背景
view2.setBackground(sharedDrawable)
相关文章:
Android View 设置背景方式全解析
一、整体概述 在 Android 开发中,视图(View)的背景设置是构建用户界面的重要组成部分。一个合适的背景可以提升界面的美观度,增强用户体验。从简单的纯色背景到复杂的动态效果,背景设置不仅影响界面美观,还…...
HTTP拾技杂谈
HTTP拾技杂谈 简单聊聊HTTP中的那些东西 文章目录 HTTP拾技杂谈前言HTTP协议1.请求从客户端到服务器端的4个步骤一般客户端请求如下:服务端响应如下 2.Keep-AliveHTTP方法Cookie 总结 前言 超文本传输协议(Hypertext Transfer Protocol ,HT…...
网络安全之RSA算法
1978年就出现了这种算法,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字(RonRivest,AdiShamir和LeonardAdleman)命名。但RSA的安全性一直未能得到理论上的证…...
神经网络为什么要用 ReLU 增加非线性?
在神经网络中使用 ReLU(Rectified Linear Unit) 作为激活函数的主要目的是引入非线性,这是神经网络能够学习复杂模式和解决非线性问题的关键。 1. 为什么需要非线性? 1.1 线性模型的局限性 如果神经网络只使用线性激活函数&…...
ES10(2019)、ES11(2020) 新增特性(八)
目录 ES10(2019) Array.flat() Array.flatMap() String.trimStart()和String.trimEnd() Symbol.prototype.description Object.fromEntries() ES11(2020) Nullish coalescing Operator【空值运算符】 可选链(…...
利用MQ自动取消未支付超时订单最佳实践
一、利用MQ自动取消未支付超时订单最佳实践 1、基于 RocketMQ 延迟消息 1.1:延迟消息 当消息写入到 Broker 后,不会立刻被消费者消费,需要等待指定的时长后才可被消费处理的消息,称为延时消息。 1.2:实现流程 &am…...
1-003:MySQL 的索引类型有哪些?
MySQL 中的索引类型主要分为以下几类,每种索引都有不同的适用场景和优化查询的作用: 1. 按存储结构分类 ① 聚簇索引(Clustered Index) 特点: InnoDB 引擎的 主键索引 就是 聚簇索引。数据与索引存储在一起ÿ…...
php虚拟站点提示No input file specified时的问题及权限处理方法
访问站点,提示如下 No input file specified. 可能是文件权限有问题,也可能是“.user.ini”文件路径没有配置对,最简单的办法就是直接将它删除掉,还有就是将它设置正确 #配置成自己服务器上正确的路径 open_basedir/mnt/qiy/te…...
Unity UGUI下实现精确点击的一种方式
比如有这样一个情况,UI的显示区域是个圆形,在点击的时候也需要精确点击到这个圆形显示区域,但是UI元素的RectTransform是个矩形 1. 使用脚本修改 2. 原理探究 此脚本继承了Image组件,但是获取了自身的Collider2D,目…...
元宇宙崛起:区块链与金融科技共绘数字新世界
文章目录 一、引言二、元宇宙与区块链的深度融合三、区块链在元宇宙金融中的应用四、金融科技在元宇宙中的创新应用五、面临的挑战与机遇《区块链与金融科技》亮点内容简介获取方式 一、引言 随着科技的飞速发展,元宇宙概念逐渐走进人们的视野,成为数字…...
postgresql14编译安装脚本
#!/bin/bash####################################readme################################### #先上传postgresql源码包,再配置yum源,然后执行脚本 #备份官方yum源配置文件: #cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS…...
警惕AI神话破灭:深度解析大模型缺陷与禁用场景指南
摘要 当前AI大模型虽展现强大能力,但其本质缺陷可能引发系统性风险。本文从认知鸿沟、数据困境、伦理雷区、技术瓶颈四大维度剖析大模型局限性,揭示医疗诊断、法律决策等8类禁用场景,提出可信AI建设框架与用户防护策略。通过理论分析与实操案…...
1分钟看懂React的那些Hook‘s
一、useEffect的五指山 1.执行时机:组件初始化,组件更新(组件内state变化) useEffect(() > {}) 2.执行时机:组件初始化 useEffect(() > {},[]) 3.执行时机:组件初始化,依赖的状态发生变化…...
聚焦两会:科技与发展并进,赛逸展2025成创新新舞台
在十四届全国人大三次会议和全国政协十四届三次会议期间,代表委员们围绕多个关键议题展开深入讨论,为国家未来发展谋篇布局。其中,技术竞争加剧与经济转型需求成为两会焦点,将在首都北京举办的2025第七届亚洲消费电子技术贸易展&a…...
深入C语言:指针与数组的经典笔试题剖析
1. sizeof和strlen的对比 1.1 sizeof sizeof 是C语言中的一个操作符,用于计算变量或数据类型所占内存空间的大小,单位是字节。它不关心内存中存储的具体数据内容,只关注内存空间的大小。 #include <stdio.h> int main() {int a 10;…...
⚡ 回声谷即时通讯系统
基于SpringBootVue3的实时通信解决方案 🌟 核心特性 #mermaid-svg-uxEwEcjlUVI6Tjjf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-uxEwEcjlUVI6Tjjf .error-icon{fill:#552222;}#mermaid-svg-uxEwEcjl…...
实验题目:授权及收回授权、约束、触发器
一、实验环境 实验使用普通PC机一台,MySQL数据库版本8.0.36,使用Navicat Premium 16提供图形化界面。 二、实验内容 1、数据库的账号、用户的建立、删除以及授权机制 2、数据库中数据完整性约束控制技术 3、触发器 三、具体完成情况(提…...
Spark(8)配置Hadoop集群环境-使用脚本命令实现集群文件同步
一.hadoop的运行模式 二.scp命令————基本使用 三.scp命令———拓展使用 四.rsync远程同步 五.xsync脚本集群之间的同步 一.hadoop的运行模式 hadoop一共有如下三种运行方式: 1. 本地运行。数据存储在linux本地,测试偶尔用一下。我们上一节课使用…...
c#中使用时间戳转换器
在C#中,时间戳转换器通常用于将时间戳(通常是一个表示自某一特定时间点(如1970年1月1日UTC)以来的毫秒数的长整型值)转换为DateTime对象,或者将DateTime对象转换回时间戳。以下是几种实现这一功能的方法: 1. 使用DateTime的构造函数 将时间戳转换为DateTime long tim…...
LLM中的transformer结构学习(二 完结 Multi-Head Attention、Encoder、Decoder)
文章目录 LLM中的transformer结构学习(二 完结 Multi-Head Attention、Encoder、Decoder)Self-Attention (自注意力机制)结构多头注意力 EncoderAdd & Norm 层Feed Forward 层 EncoderDecoder的第一个Multi-Head AttentionMas…...
FreeSWITCH 之 chat
要把 FreeSWITCH 之 chat 完全研究清楚,似乎不容易 发送,路由,接收 跟哪些模块有关 等等 咱一边查资料,一边整理,不着急 先看看 Kamalio 怎么发 MESSAGE loadmodule "uac.so"route[uac_send_message] {…...
本地fake server,
C# 制作的系统级tcp 重定向,整个系统只要有访问指定url,返回自定义内容到访问端。不局限在浏览器单一方面。 再者请理解这个图的含金量,服务器down机都可以模拟。 用途那就太多了,当然很多用途都不正当。嘿嘿 如果你很想要源代…...
用Deepseek写一个 HTML 和 JavaScript 实现一个简单的飞机游戏
大家好!今天我将分享如何使用 HTML 和 JavaScript 编写一个简单的飞机游戏。这个游戏的核心功能包括:控制飞机移动、发射子弹、敌机生成、碰撞检测和得分统计。代码简洁易懂,适合初学者学习和实践。 游戏功能概述 玩家控制:使用键…...
解析 SQL,就用 sqlparse!
文章目录 解析 SQL,就用 sqlparse!一、背景:为什么你需要 sqlparse?二、什么是 sqlparse?三、如何安装 sqlparse?四、简单易用的库函数1\. parse(sql)2\. format(sql, **options)3\. split(sql)4\. get_typ…...
Flask 全栈学习指南
一、Flask 基础核心 1. 核心概念与启动流程 WSGI 与 Werkzeug Flask 基于 Werkzeug 实现 WSGI 协议,处理 HTTP 请求到响应的全流程。手动实现 WSGI 应用示例:def simple_app(environ, start_response):status 200 OKheaders [(Content-type, text/pla…...
git的使用
1、git的安装(windows10) 网址:Git - Downloading Package全部默认安装就好。在任意文件夹中右击,列表中出现git即为安装成功。 2、git的基本配置 右击打开git bash设置用户信息 git config --global user.name "username…...
MQTT协议下温度数据上报观测云最佳实践
MQTT 介绍 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种轻量级的、基于发布/订阅模式的消息传输协议,专为低带宽、高延迟或不可靠的网络环境设计,广泛应用于物联网(IoT…...
什么是Flask
Flask是Python中一个简单、灵活和易用的Web框架,适合初学者使用。它提供了丰富的功能和扩展性,可以帮助开发者快速构建功能完善的Web应用程序。 以下是Python Flask框架的一些特点和功能: Flask 是一个使用 Python 编写的轻量级 WSGI 微 Web…...
数字投屏叫号器-发射端python窗口定制
窗口 本系列前章介绍,叫号器的显示端,完成了视频音频的形成和传输的介绍。本章节开始定制小窗口。 最终实现,处于桌面最前端,发送指令,集合前篇即可完成: 处理本地text.txt更新,随之被rtsp采集…...
文本转语音-音画适时推送rtsp并播放
文本语音 rtsp适时播放叫号系统的底层逻辑 发布Linux, unix socket 和window win32做为音频源的 python10下的(ffmpeg version 7.1) 可运行版本. 这两天在弄这个,前2篇是通过虚拟声卡,达到了最简单的一个逻辑,播放文本就从声卡发声࿰…...
clickhouse修改和删除数据
标题:ClickHouse中修改和删除数据的简易指南 在大数据时代,数据库技术的发展日新月异。作为一款专为实时分析设计的列式数据库管理系统,ClickHouse因其高效的查询性能而受到欢迎。照这么推测的话,对于那些习惯于传统SQL操作&…...
2025CSP-J 冲刺训练(1):二分
2025CSP-J 冲刺训练 1 一、二分查找函数1. 头文件2. 前提条件3. 功能函数3.1 lower_bound3.2 upper_bound 二、二分答案模板1. 前提条件2. 模板 三、典型例题1. 寻找固定的和1.1 审题1.2 分析1.3 参考答案 2. Snuke Festival2.1 审题2.2 分析2.3 参考答案 四、拓展例题1. 晒衣服…...
无公网IP也能远程控制Windows:Linux rdesktop内网穿透实战
文章目录 前言1. Windows 开启远程桌面2. Linux安装rdesktop工具3. Win安装Cpolar工具4. 配置远程桌面地址5. 远程桌面连接测试6. 设置固定远程地址7. 固定地址连接测试 前言 如今远程办公已经从一种选择变成了许多企业和个人的必修课,而如何在Linux系统上高效地访…...
Win10 访问 Ubuntu 18 硬盘
目录 方案一:使用Samba共享服务Ubuntu 18 端配置Windows 10 端访问 方案二:使用 SSHFS(需在 Windows 上安装 SSH 客户端)Ubuntu 18 端配置Windows 10 端配置 方案三:使用 FTP 服务Ubuntu 18 端配置Windows 10 端访问 方…...
算法.习题篇
算法 — 地大复试 模拟 while循环和MOD循环计数 1.约瑟夫问题 http://bailian.openjudge.cn/practice/3254 using namespace std;bool isNoPeople(vector<bool> c)//判断当前数组是否一个小孩都没有了 {bool nopeople true;for (bool ival : c){if ( ival true)nop…...
upload-labs文件上传
第一关 上传一个1.jpg的文件,在里面写好一句webshell 保留一个数据包,将其中截获的1.jpg改为1.php后重新发送 可以看到,已经成功上传 第二关 写一个webshell如图,为2.php 第二关在过滤tpye的属性,在上传2.php后使用b…...
一二三应用开发平台——能力扩展:多数据源支持
背景 随着项目规模的扩大,单一数据源已无法满足复杂业务需求,多数据源应运而生。 技术选型 MyBatis-Plus 的官网提供了两种多数据源扩展插件:开源生态的 <font style"color:rgb(53, 56, 65);">dynamic-datasource</fon…...
【Python】整数除法不正确,少1的问题,以及有关浮点数转换的精度问题
1. 问题 今天在做leetcode 不同路径 的时候发现了个问题 对于m53 n4class Solution:def uniquePaths(self, m: int, n: int) -> int:rlt 1for i in range(0, m-1):rlt * (m n - 2 - i)for i in range(0, m-1):rlt / (i 1)return int(rlt)为什么这个结果是 26234class S…...
【贪心算法】简介
1.贪心算法 贪心策略:解决问题的策略,局部最优----》全局最优 (1)把解决问题的过程分成若干步 (2)解决每一步的时候,都选择当前看起来的“最优”的算法 (3)“希望”得…...
狮子座大数据分析(python爬虫版)
十二星座爱情性格 - 星座屋 首先找到一个星座网站,作为基础内容,来获取信息 网页爬取与信息提取 我们首先利用爬虫技术(如 Python 中的 requests 与 BeautifulSoup 库)获取页面内容。该页面(xzw.com/astro/leo/&…...
【商城实战(20)】商品管理功能深化实战
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
YC 孵化项目 Pinch:实时语音翻译视频会议平台;Mistral OCR:能处理多语言多模态复杂文档丨日报
开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。 我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 …...
数据库原理6
1.数据是信息的载体 2.数据库应用程序人员的主要职责:编写应用系统的程序模块 3.关系规范化理论主要属于数据库理论的研究范畴 4.数据库主要有检索和修改(包括插入,删除,更新)两大操作 5.概念模型又称为语义模型。…...
深度学习与大模型基础-向量
大家好!今天我们来聊聊向量(Vector)。别被这个词吓到,其实向量在我们的生活中无处不在,只是我们没注意罢了。 1. 向量是什么? 简单来说,向量就是有大小和方向的量。比如你从家走到学校&#x…...
OpenManus:3小时复刻 Manus(OpenManus安装指南)
项目地址:GitHub - mannaandpoem/OpenManus: No fortress, purely open ground. OpenManus is Coming. 安装指南 我们提供两种安装方式。推荐使用方式二(uv),因为它能提供更快的安装速度和更好的依赖管理。 方式一:使…...
2025年渗透测试面试题总结-快某手-安全实习生(一面、二面)(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 快某手-安全实习生 一面 一、Linux操作:查看进程PID的5种方法 二、Elasticsearch&#x…...
【微信小程序】uniapp开发微信小程序
uniapp开发微信小程序 1、上拉加载 下拉刷新 import { onReachBottom, onPullDownRefresh } from dcloudio/uni-app;配置允许下拉刷新: {"path" : "pages/pet/pet","style" : {"navigationBarTitleText" : ""…...
动态规划_最大子数组和
53. 最大子数组和 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组是数组中的一个连续部分。 示例 1:输入:nums [-2,1,-3,4,-1,2,1,-5,4] …...
从零开始的python学习(五)P71+P72+P73+P74
本文章记录观看B站python教程学习笔记和实践感悟,视频链接:【花了2万多买的Python教程全套,现在分享给大家,入门到精通(Python全栈开发教程)】 https://www.bilibili.com/video/BV1wD4y1o7AS/?p6&share_sourcecopy_web&v…...
Vue3实战学习(Element-Plus常用组件的使用(输入框、下拉框、单选框多选框、el-image图片))(上)(5)
目录 一、Vue3工程环境配置、项目基础脚手架搭建、Vue3基础语法、Vue3集成Element-Plus的详细教程。(博客链接如下) 二、Element-Plus常用组件使用。 (1)el-input。(input输入框) <1>正常状态的el-input。 <2>el-input的disable状态。 <3…...