Android屏幕适配

2023-11-05

前言(请先阅读前言)

Android开发中,Android屏幕适配是一件很棘手的事,需要注意的几点:

(1)尽量使用线性布局(LinearLayout)、相对布局(RelativeLayout)和帧布局(FrameLayout),不要使用绝对布局;

(2)尽量使用dp和sp,不要使用px;

(3)为不同的分辨率提供不同的布局文件和图片;

(4)在AndroidMainfest.xml中设置多分辨率支持。

重点在最后总结,如果想快速适配,直接查看最后总结。

 

 

对于从事android应用开发的朋友来说都应该知道,现在的安卓手机的屏幕类型十分繁多, 大小尺寸,长宽比例都不尽相同,同一个界面在不同分辨率的手机上可能出现布局错乱,控件跑位的现象。做屏幕的适配偶们不可能实现在每种屏幕上显示出的界面 效果完全一致。只能靠偶们平时的编程习惯和经验是的界面在不同的屏幕尺寸在不会出现过分的走位,在可遇见范围内控制界面在不同屏幕下的变化,并做出相应调 整。那么偶们应该如何做到屏幕的适配呢?下面我就以我的开发经验来说说吧。

1、首先从布局考虑

Android 的界面是由布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦。组件按照布局的要求依次排列,就组成了用户所看见的界面。 Android的五大布局分别是LinearLayout(线性布局)、FrameLayout(单帧布局)、RelativeLayout(相对布 局)、AbsoluteLayout(绝对布局)和TableLayout(表格布局)。

每种布局都有其特点,你可能会郁闷无法掌握好每种布局的使用,其实不管一个界面多复杂,偶们只需上述的一两种布局就可以实现,android提供这么多的布局供偶们选择只是为了方便偶们的开发。

本人习惯用LinearLayout,可能由于个人习惯,所以觉得线性布局的条理性更强一点,LinearLayout布局的子控件有一个很重要的属 性,android:layout_weight。该属性将会在后面讲到,在这里只是建议大家选择一种自己比较熟悉的布局,自己的条理性强点,在屏幕尺寸 发生变化时,能对子控件大小和位置的变化有一定的把握,这样才能做好屏幕适配。 

2、px、dp和dp的关系

布局和子控件都有两个重要属性,layout_height和layout_width,用于指定控件的大小。系统还提供了几个属性供偶们使用, 

1)fill_parent 

设置一个构件的布局为fill_parent将强制性地使构件扩展,以填充布局单元内尽可能多的空间。这跟Windows控件的dockstyle属性大体一致。设置一个顶部布局或控件为fill_parent将强制性让它布满整个屏幕。 

2) wrap_content 

设置一个视图的尺寸为wrap_content将强制性地使视图扩展以显示全部内容。以TextView和ImageView控件为例,设置为 wrap_content将完整显示其内部的文本和图像。布局元素将根据内容更改大小。设置一个视图的尺寸为wrap_content大体等同于设置 Windows控件的Autosize属性为True。 

3)match_parent 

Android2.2中match_parent和fill_parent是一个意思 .两个参数意思一样,match_parent更贴切,于是从2.2开始两个词都可以用。那么如果考虑低版本的使用情况你就需要用fill_parent了。 

更多情况下,为了界面可以适应不同屏幕分辨率的手机,偶们需要限制控件的大小,这里就要用到px、dp、dp、sp等等,这里只简单介绍下px和dp,其他在此不做阐述。 

px: pixels(像素),不同的设备不同的显示屏显示效果是相同的,是绝对像素,是多少就永远是多少不会改变。 显然为了适配不同手机屏幕的显示,使用px来指定控件的大小是不行。 

dp: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这 这个不依赖像素。 

这里要特别注意dp与屏幕密度有关,而屏幕密度又与具体的硬件有关,硬件设置不正确,有可能导致dp不能正常显示。在屏幕密度为160的显示屏 上,1dp=1px,有时候可能你的屏幕分辨率很大如720*1280,但是屏幕密度没有正确设置比如说还是160,那么这个时候凡是使用dp的都会 显示异常,基本都是显示过小。 

dp的换算:dp(value)=(int) (px(value)/1.5 + 0.5) 

dp: 很简单,和dp是一样的。 

所以在需要限定控件大小的时候,建议使用dp。 

android px、dp、sp之间的转换,请参考https://blog.csdn.net/NakajimaFN/article/details/117771503

3、屏幕的分类

1)以总像素数分,文本的size等都要改,如下图所示: 

clip_image001

每一个分类都有其最小分辨率,如下,可根据分辨率划分种类: 

clip_image003

2)以屏幕密度分,提供不同的图片,如下图所示: 

clip_image004

Android 寻找最佳资源原理: 

1, 排除与设备设置不符合的资源 

2, 根据限定词(qualifier)的优先级,按照顺序查找 

3, 在限定词下,是否存在资源路径 

4, 排除不包含在限定词中的资源路径 

5,  继续执行不同的限定词查找,直到找到相应的资源 

如下图所示:(提供英文版和中文版) 

clip_image006

clip_image008

4、layout_weight属性

这个属性其实很好用,一般和android:layout_height="fill_parent"或 android:layout_width="fill_parent"一起使用,它用于描述该子元素在剩余空间中占有的大小比例。加入一行只有一个文本 框,那么它的默认值就为0,如果一行中有两个等长的文本框,那么他们的android:layout_weight值可以是同为1。如果一行中有两个不等 长的文本框,那么他们的android:layout_weight值分别为1和2,那么第一个文本框将占据剩余空间的三分之二,第二个文本框将占据剩余 空间中的三分之一。android:layout_weight遵循数值越小,重要度越高的原则。android屏幕如此繁多,不可能都是等比例缩放的, 所以单纯使用dp来设置控件也是行不通,与layout_weight属性灵活结合使用,增强界面的适应性。 

5、drawable资源

首先:你需要在AndroidManifest.xml文件的元素如下添加子元素 

 

 
  1. <supports-screens android:anyDensity="true"  android:largeScreens="true"  android:normalScreens="true"  android:smallScreens="true"  android:xlargeScreens="true" />   

名如其意,以上是为我们的屏幕设置多分辨率支持(更准确的说是适配大、中、小三种密度)。android:anyDensity="true" ,这一句对 整个的屏幕都起着十分重要的作用,值为true,我们的应用程序当安装在不同密度的手机上时,程序会分别加载hdpi,mdpi,ldpi文件夹中的资 源。相反,如果值设置为false,即使我们在hdpi,mdpi,ldpi文件夹下拥有同一种资源,那么应用也不会自动地去相应文件夹下寻找资源,这种 情况都是出现在高密度,以及低密度的手机上,比如说一部240×320像素的手机,如果设置 android:anyDensity="false",Android系统会将240 x 320(低密度)转换为 320×480(中密度),这样的 话,应用就会在小密度手机上加载mdpi文件中的资源。
细心的人会发现自 android2.0开始之后drawable文件被三个文件夹drawable-hdpi,drawable-mdpi,drawable-ldpi三 个文件夹所取代,有些编程人员为了让应用程序默认地加载某些图片,他们会特意地去在android2.0之后的应用程序中重新创建drawable文件 夹,其实这样做完全没有必要,通过第一段的分析我们得知,android:anyDensity="false",则应用会将大小密度转变成中密度,从而 去加载mdpi中的资源。这里同样,当android:anyDensity="false",则应用会去加载mdpi中的资源。 

总结一下:

第一:android:anyDensity="true",系统会依据屏幕密度,自动去找对应的文件夹

第二:android:anyDensity="false",

(1)如果drawable-hdpi,drawable-mdpi,drawable-ldpi三个文件夹中有同一张图片资源的不同密度表示,那么系统会去加载

drawable_mdpi文件夹中的资源

(2)如果drawable-hpdi中有高密度图片,其它两个文件夹中没有对应图片资源,那么系统会去加载drawable-hdpi中的资源。

(3)如果drawable-hdpi,drawable-mdpi中有图片资源,drawable-ldpi中没有对应的图片资源,那么系统会加载drawable-mdpi文件夹中的资源 

注意上图各种文件夹的不同表示。

drawable-hdpi 该图片即适用于横屏,也适用于竖屏

drawable-land-hdpi,当屏幕为横屏,且为高密度时,加载此文件夹中的资源

drawable-port-hdpi,当屏幕为竖屏,且为高密度时,加载此文件夹中的资源 

6、draw9patch工具

android SDK 包的tools目录下为偶们提供了这么一个图片处理工具。有时候偶们需要图片资源自适应且不失真,无论横屏还是竖屏,高分辨率还是低分辨率,都能自动填充 满,而且不失真等等背景问题。 Android针对这种情况,专门制作了一种.9.PNG格式来解决这个问题。draw9patch就是帮助偶们制 作.9.PNG格式资源的一个小工具。
*.9.PNG就标准的PNG格式,只是在最外面一 圈额外增加1px的边框,这个1px的边框就是用来定义图片中可扩展的和静态不变的区域。特别说明,left(左)和top(上)边框中交叉部分是可拉伸 部分,未选中部分是静态区域部分。right和bottom(下和右)边框中交叉部分则是内容部分。

clip_image009

如上图《也就是说,在手机里。无论上面那张图怎么放大,四周的圆角都是不会被放大的!只有left(左)和top(上)边框内才会伸缩!
在 Android中以9.PNG格式的图片未背景,则能够自定义拉伸而不失真,比如系统的Button就是一个典型的例子。其实呢,无论是left和 top,还是right和bottom都是把图片分成9块 (边角四块是不能缩放的,其他的四块则是允许缩放的),所以叫做9.PNG。
关于draw9patch工具的使用在此不做阐述,需要的可以自己去百度一下。  

7、Layout资源

有时候可能由于屏幕布局过于复杂,同一个布局文件很难适应所有的屏幕分辨率。可以像drawable资源一样,在工程的res文件夹下建立多个相应的layout文件夹,为相应分辨率的屏幕编写相应的layout文件。 

文件夹的命名规范是这样的:layout-分辨率
例如:values-sw384dp ,values-sw392dp,values-sw411dp等等。
系统就会根据运行环境的分辨率优先加载相应的文件夹下的layout布局文件。 

可以用插件生成,请参考https://blog.csdn.net/NakajimaFN/article/details/117654609

8、代码动态添加

使用过swing的都知道如何代码动态添加控件,android也是一样的,当然代码动态添加远远没有xml布局文件方便,也不易于管理。但他的好处就是偶 们可以在代码里获得运行环境的屏幕尺寸,通过计算构建相应的界面。虽然代码编写界面确实繁琐,但他的适配性也是不可否认的。
获取屏幕的大小可以有两种方法:
// 方法一:
WindowManager manager = getWindowManager();
int width = manager.getDefaultDisplay().getWidth();
int height = manager.getDefaultDisplay().getHeight();
// 方法二:
DisplayMetrics dMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dMetrics);
int screenWidth = dMetrics.widthPixels;
int screenHeight = dMetrics.heightPixels; 

然后就可以在代码中为这几种密度分别设置便宜量,但是这种方法最好不要使用,最好的方法是在xml文件中不同密度的手机进行分别设置。 

这里地图的偏移量可以在values-hpdi,calues-mdpi,calues-ldpi三种文件夹中的dimens.xml文件进行设置。 

值得一提的是: 

<dimen name="bitmap_common_topoffset">40dp</dimen> 

<dimen name="bitmap_common_bottomoffset">-14dp</dimen> 

这里的负数是完全起作用的,系统会认为它是一个负值。 

9、国家化问题

有时候在xml中设置了相应的语言,但是为什么当我们更改语言之后,UI显示仍然不起作用? 不要怀疑是系统出了问题,这与我们在代码中引用values/string.xml中字符串的方式有关。 

错误的方式: 

 1. 声明全局变量 private static String tempStr; 

 2. 在onCreate方法中对该变量赋值 tempStr =context.getString(R.string.test); 

 3. 在更新UI的方法(非onCreate方法)中引用该变量。)textView.setText(tempStr); 

原因是由于,当修改本地语言时,onCreate不会再被执行一遍. 变量tempStr 依然会使用页面刚启动时加载的默认英语。 

正确的方式:直接进行第三步:textView.setText(context.getString(R.string.test)); 

10、其他

除了xml文件和代码编写界面外,还可以用webview加载相应的html文件,界面内容由html完成。本人见过别人用html5编写界面也非常美观,屏幕的适应性也非常强。由于本人对html5不是很了解,在此就不细谈,有兴趣的朋友可以去了解下。
有时候可能由于屏幕实在太小,要显示的内容又实在太多,一屏实在挤不下去。可以适当的使用ScrollView控件使界面更加完整,确保用户体验。 

如何将一个应用程序适配在不同的手机上,虽然这不算是一个技术问题,但是对于刚刚做屏幕的开发人员来说,还真不是一件多么简单的事情。
以上只是本人学习android开发以来的一点拙见和总结,欢迎热爱编程的朋友们一起来探讨和学习! 

最后总结:

1、尽量使用线性布局(LinearLayout)、相对布局(RelativeLayout)和帧布局(FrameLayout),不要使用绝对布局。

2、尽量使用dp和sp,不要使用px。

3、为不同的分辨率提供不同的布局文件和图片。

4、在AndroidMainfest.xml中设置多分辨率支持。

注意:重点有几个:

1.先用插件工具生成各种value文件夹。插件使用请参考https://blog.csdn.net/NakajimaFN/article/details/117654609

 

2.设置UI大图宽度,并下载3套图标。

 

3.设置控件(Layout和View)宽高要使用match_parent、wrap_content和dp(用插件生成的,如:dp_30),TextView文字大小使用sp(用插件生成的,如:sp_18),对于特殊布局(需要适配高度的布局),则查看下图。

怎么样,现在是不是觉得很清晰明朗了啊??希望偶们就不要为屏幕适配而发愁啦!

 

 

 

如对此有疑问,请联系qq1164688204。

推荐Android开源项目

项目功能介绍:RxJava2和Retrofit2项目,添加自动管理token功能,添加RxJava2生命周期管理,使用App架构设计是MVP模式和MVVM模式,同时使用组件化,部分代码使用Kotlin,此项目持续维护中。

项目地址:https://gitee.com/urasaki/RxJava2AndRetrofit2

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

Android屏幕适配 的相关文章

  • ListView与适配器

    ListView与适配器 ListView是什么 ListView是一个以垂直方式在项目中显示视图的列表 即在一个窗口里可以滚动查看数据 比如说查看聊天记录 是一种不能实现确定视图中的内容的适配器视图 adapter view 数据和视图的
  • $nextTick实现原理详解

    vue中有一个较为特殊的API nextTick 根据官方文档的解释 它可以在DOM更新完毕之后执行一个回调 用法如下 修改数据 vm msg Hello DOM 还没有更新 Vue nextTick function DOM 更新了 复制
  • 5 个免费开源的 3D 建模/渲染工具。

    5 个开源 3D 建模 渲染工具 3八 2011 作者 riku 本文采用 CC BY NC SA 2 5协议授权 转载请注明 本文链接 5 个免费开源的 3D 建模 渲染工具 1 Art of Illusion 跨平台 支持 Window
  • 15000cd是多少流明_光通量(lm)发光强度(cd)照度单位(lux)之间的关系

    光通量 lm 发光强度 cd 照度单位 lux 之间的关系 光通量 lm 由于人眼对不同波长的电磁波具有不同的灵敏度 我们不能直接用光源的辐 射功率或辐射通量来衡量光能量 必须采用以人眼对光的感觉量为基准的单位 光通量来衡量 光通量的用符号
  • SetUnhandledExceptionFilter处理未捕获异常

    一 首先看下百度上的对此函数的解释 设置异常捕获函数 当异常没有处理的时候 系统就会调用SetUnhandledExceptionFilter所设置异常处理函数 例如一些程序在出错的时候 会向用户报告说程序那出错就是利用这个 例如QQ 二
  • github时好时坏连接不上的问题

    1 找到自己的hosts文件 直接百度 hosts文件地址 一般都是C Windows System32 drivers etc 2 用ip在线查询工具查询github网站的ip地址 3 用记事本打开hosts文件 如图添加内容 我下载有的
  • 【Python】本地版 Whisper 自动转录器(附源码网址)

    目 录 一 实时自动语音转录器简介 二 开源Whisper实时转录器 三 pyinstaller 打包发布exe应用程序 四 修改版源代码 一 实时自动语音转录器简介 实时自动语音转录器是一种能够自动将语音信号转换为文字的应用程序 它通常具
  • 服务器被攻击怎么办?如何防止服务器被攻击?

    目前 服务器遭受攻击已经成为屡见不鲜的事情了 而且大部分企业都发生过服务器被攻击的情况 从而导致业务无法正常运行 造成严重的损失和影响 那么服务器被攻击怎么办 如何有效应对服务器被攻击呢 跟着小编来看看吧 1 换高防IP或切换高防服务器 流
  • 【华为OD机试真题 Java】创建二叉树

    前言 本专栏将持续更新华为OD机试题目 并进行详细的分析与解答 包含完整的代码实现 希望可以帮助到正在努力的你 关于OD机试流程 面经 面试指导等 如有任何疑问 欢迎联系我 wechat steven moda email nansun09
  • Binder机制详解(二)

    系列章节 Binder机制详解 一 Binder机制详解 三 文章目录 前言 一 什么是MMU 二 发展历史 三 相关概念 四 分页机制 1 页表的概念 2 页式内存管理 总结 前言 上一章通过一个例子让我们认识了Binder通信机制不同于
  • HbuilderX微信小程序uniapp分包小白教程&趟坑【伸手党福利】【干货】

    本教程为小白教程 主管操作 具体原理讲解欢迎评论区补充 微信小程序分包原因 1 多人开发 2 引入了大型js 3 单项目多模块需要分包 官方资料 https developers weixin qq com miniprogram dev
  • 扫描指定路径下有多少行代码

    import java io BufferedReader import java io File import java io FileReader import java io IOException Created by qiaoju
  • 使用蓝牙耳机听群晖ds218play中的音乐(audio station)

    缘起 有时需要欣赏nas中的音乐而又不影响家人 有什么方法呢 思路 研究了一下 发现新版的群晖dms支持蓝牙usb蓝牙适配器 可以使用audio station播放 蓝牙耳机收听 步骤 1 购买CSR USB蓝牙适配器 2 插入ds218p
  • 大数据CDC技术

    1 简介 CDC全称是Change Data Capture 是一种捕获增量数据的技术统称 目前主要应用在捕获数据库数据变更的技术 其中数据库变更包括DDL DML DCL等语句触发的变更 在数据备份容灾 数据分发 面向数仓的数据集成等场景
  • JavaScript实现WebService的http的Post请求

    javascript 这个脚本实现Webservice调用 function AjaxFunc var url http localhost MyService Service asmx var method DollarConvertTo
  • 使用Jmeter做压力测试,参数化

    1 首先在工作台下添加一个线程组 测试计划右键 添加 线程 用户 线程组 根据需求填写线程组信息 根据测试数据量填写 线程数也就是并发数 下面的调度时间代表规定的时间内完成并发 2 添加HTTP请求 在线程组下右键 添加 取样器 HTTP请
  • 微信小程序image组件的mode总结+介绍(包含heightFix)

    2 10 3版本后 微信小程序的图片即image组件新增了heightFix属性 mode 总共具有14种属性 满足各种情况的放置需要 14种属性可以分为两大类 一种是完全保留的缩放属性 一种是裁剪属性 原图 缩放属性 scaleToFil
  • 常见的List接口的实现类

    常见的List接口的实现类 ArrayList 数组实现 查询快 增删慢 轻量级 线程不安全 LinkedList 双向链表实现 增删快 查询慢 线程不安全 Vector 数组实现 重量级 线程安全 使用少 ArrayList实现类 pub

随机推荐

  • cesium-添加点线面可以动可编辑

    使用 const drawEntities new CesiumEntityDraw viewer drawEntities startDraw 需要绘制的类型 CesiumEntityDraw ts文件 import Cesium fro
  • RabbitMQ编程模型

    Hello World 在本教程的这一部分中 我们将用 Java 编写两个程序 发送单个消息的生产者和接收消息并将其打印出来的消费者 我们将忽略 Java API 中的一些细节 专注于这个非常简单的事情 以便开始 这是一个 Hello Wo
  • vue3的element-plus的el-dialog的样式加上scoped发现:deep()不再生效解决方案

    想要将 弹框 el dialog header el dialog body 的padding值设为0 但是 el dialog 用了 append to body 属性情况下 官网解释 Dialog 自身是否插入至 body 元素上 嵌套
  • C语言入门教程之三天入门C语言(第二天结构体与指针使用)

    三天学习C语言 第二步 一 C语言中的几种集合的表达形式 数组类型 数组扩展 结构体的表示 联合体的表示 二 sizeof 的使用 三 指针的使用 指针变量 未完待续 指针与数组 一 C语言中的几种集合的表达形式 在数学中一般一组数据的集合
  • 前端面试100道

    幕布链接 完整版 面试终极 幕布 目录 1 弹性布局的认识 2 Var和let有什么区别 3 和 的区别 4 Js事件 5 Vue计算属性 6 Vue采用指令 7 Html中的浮动怎么使用 8 箭头函数 9 Js的this指向 10 Cal
  • css兼容浏览器的各种背景渐变

    需要兼容各浏览要注意的是 必须加上浏览器的私有前缀 否则一般都是不生效的 浏览器的私有前缀主要是解决不同浏览器的兼容性问题 webkit 谷歌浏览器 安卓 moz 火狐浏览器 o opera浏览器 ms ie浏览器 首先来个简单的也最常见的
  • 父组件更新,子组件未更新

    囧 问题 项目中 渲染的数据为对象数组arr obj obj obj 业务需要要给某个对象obj增加一个属性key arr forEach obj gt obj key 囧 但是当在父组件中修改这个属性后 子组件并没有随着更新 原因 没有通
  • 软件测试笔试题含答案

    目录 一 填空 1 系统测试使用 C 技术 主要测试被测应用的高级互操作性需求 而无需考虑被测试应用的内部结构 2 单元测试主要的测试技术不包括 B 3 A 的目的是对最终软件系统进行全面的测试 确保最终软件系统满足产品需求并且遵循系统设计
  • ReactNative中使用WebSocket

    首先说说发布订阅这种设计模式 这种模式我给它起了个别名叫遥控炸弹 很多朋友理解不了这种模式 那 举个例子 张三是个法外狂徒 它要去复仇 他想去炸掉仇家的房子 他来到仇家所在的小区 拿出自己准备的炸弹 监听 丢进仇家的屋里 页面 等他走出小区
  • Hadoop3.x集成HBase

    HBase作为Hadoop家族中实现高并发的利器 我们来看看怎么进行集成 1 下载并上传到服务器 目前使用2 3 5版本 wget https mirrors bfsu edu cn apache hbase 2 3 5 hbase 2 3
  • 软件工程—软件测试

    前言 软件测试是为了发现错误而执行程序的过程 是对需求分析 设计和编码3个阶段进行的最终复审 下面介绍了软件测试的原则 方法过程等 测试用例的设计 测试的步骤还有软件的调试技术 一 软件测试 软件测试的目的 1 测试是程序的执行过程 目的在
  • QT Creator 自定义控件的方法和步骤

    QT版本 QT 6 2 3 QT Creator6 0 2 Community 是MSVC编写 要注意看哦 编写自定义控件的时候也要用 1 打开QT Creator 点击 文件 gt 新建文件或项目 gt 其他项目 gt QT4设计师自定义
  • 微信小程序在wxml中使用函数

    方法一 在wxml中直接添加模块 就可以在wxml中直接引用 举个例子
  • VS2022 安装 .NET Framework 4.0 和 .NET Framework 4.5 的方法

    前言 2022年5月27日 刚刚把VS2019升级到了VS2022 安装时已经不提供 NET Framework 4 0和 NET Framework 4 5的目标框架了 打开VS也提示不支持目标框架 解决方法 1 下载 NET Frame
  • tcp的半连接与完全连接队列

    队列及参数 server端的半连接队列 syn队列 在三次握手协议中 服务器维护一个半连接队列 该队列为每个客户端的SYN包开设一个条目 服务端在接收到SYN包的时候 就已经创建了request sock结构 存储在半连接队列中 该条目表明
  • 信号处理算法(4):全球最快的傅里叶变换算法(FFTW)

    本文大部分内容转载自博客 congwulong https blog csdn net congwulong article details 7576012 FFTW Fastest Fourier Transform in the Wes
  • C++Primer 第五版 ——《第十四章 》重载运算符 与 类型转换

    目录 基本概念 如何调用 非成员函数 和 成员函数的 重载运算符 491P 有哪些运算符就不应该被重载 491P 重载运算符的 返回类型 应该与 内置版本的返回类型兼容 492P 重载 赋值和 复合赋值运算符 应该返回左侧运算对象的一个引用
  • C语言 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。

    include
  • 线上问题总结:运行在容器里的springboot应用,出现多次oom

    项目运行环境 运行环境 k8s docker open jdk11 springBoot 公司的项目都是使用kubernate docker来管理 运行应用 问题描述 发现项目出现多次oom 排查到的原因有两个 1是分配的堆内存太小 2是代
  • Android屏幕适配

    前言 请先阅读前言 Android开发中 Android屏幕适配是一件很棘手的事 需要注意的几点 1 尽量使用线性布局 LinearLayout 相对布局 RelativeLayout 和帧布局 FrameLayout 不要使用绝对布局 2