Android屏幕适配(网易云音乐方案)

简单高效无侵入式Android屏幕适配

最近在学习网易的Android课程,网易的老师提供了网易云音乐的屏幕适配解决方案,主要有两种,17年前是采用自定义缩放布局,17年后是采用的是工具类发方案,现在这两种方案在网易云音乐中是同时存在的。互不影响。在对比dimen适配、density适配、百分比布局适配等各种适配方案之后,网易云音乐的这两种方案在我们的项目中都是非常简洁高效的。

屏幕适配的相关概念
像素(px)

通常所说的像素,就是CCD/CMOS上光电感应元件的数量,一个感光元件经过感光,光电信号转换,A/D转换等步骤以后,在输出的照片上就形成一个点,我们如果把影像放大数倍,会发现这些连续色调其实是由许多色彩相近的小方点所组成,这些小方点就是构成影像的最小单位“像素”(Pixel)。

分辨率

手机在横向、纵向上的像素点数总和,一般描述成宽高 ,即横向像素点个数乘以纵向像素点个数。

屏幕尺寸(inch)

手机对角线的物理尺寸,单位 英寸(inch),一英寸大约2.54cm,常见的尺寸有4.7寸、5寸、5.5寸、6寸。

屏幕像素密度(dpi)

每英寸长度上像素点个数。

例如每英寸内有160个像素点,则其像素密度为160dpi。

公式: 像素密度=像素/尺寸 (dpi=px/in)

标准屏幕像素密度(mdpi)

每英寸长度上还有160个像素点,即称为标准屏幕像素密度(mdpi)。

像素密度等级

手机真实像素密度与标准屏幕像素密度(160dpi)的比值。官方给出的0.75、1、1.5、2、3、4,即对应120dpi、160dpi、240dpi、320dpi、480dpi、640dpi

密度无关像素(dp)

density-independent pixel,叫dp或dip,与终端上的实际物理像素点无关。可以保证在不同屏幕像素密度的设备上显示相同的效果,是安卓特有的长度单位。

独立比例像素(sp)

scale-independent pixel,叫sp或sip,字体大小专用单位,可根据字体大小首选项进行缩放;

推荐使用12sp、14sp、18sp、22sp作为字体大小,不推荐使用奇数和小数,容易造成精度丢失,12sp以下字体太小。

尺寸、像素、像素密度关系

在这里插入图片描述

几种屏幕适配方案的对比
dimen适配

适配交由系统根据手机分辨率自动读取不同的配置来完成,开发者无需手动处理任何细节。但坏处也很明显,由于对于各种分辨率,为了保证能最大精度的适配,我们要写一大堆的dimen文件,当然,直接用工具生成即可,主要问题是增大了安装包的大小。

density适配

通过动态修改手机的density来实现,但这种方式的缺陷是,有些厂商的手机不允许修改density的操作,再者,修改density一般是对宽度进行适配,而高度的适配则需要单独处理,否则有可能出现垂直方向显示不全的问题,这跟设备的屏幕比例有关,虽然可以通过加个ScrollView解决,但总体来说还是比较繁琐,效果也只是差强人意。

百分比布局适配

谷歌官方有提供了这套解决方案,在GitHub上可以找到,并且还有开发者对其进行了进一步封装完善。由于UI小姐姐给我

### 关于悬浮音乐播放器的实现方法 悬浮音乐播放器是一种能够在屏幕上自由浮动并保持可见的应用程序组件,通常用于提供便捷的操作体验。以下是其实现的关键技术和可能使用的开源项目。 #### 技术原理 悬浮窗技术的核心在于操作系统级别的权限支持以及图形界面的设计与开发。在 Android 平台上,可以通过 `WindowManager` 和 `TYPE_APPLICATION_OVERLAY` 来创建悬浮窗[^1]。而在 Web 环境中,则主要依赖 JavaScript 和 HTML5 提供的功能来动态调整页面元素的位置和状态[^3]。 #### 开发环境准备 - **Android**: 需要具备 Java/Kotlin 编程能力,并熟悉 Android SDK 中有关 WindowManager 的 API 使用。 - **Web**: 掌握前端技术栈 (HTML/CSS/JavaScript),特别是 DOM 操作及事件监听机制。 #### 实现步骤概述 尽管不使用具体步骤描述,但仍需提及几个重要方面: - 创建基础 UI 布局; - 设置窗口参数以允许覆盖其他应用程序; - 处理触摸事件完成拖拽逻辑; - 添加必要的动画效果提升用户体验; #### 推荐开源项目 1. **SpotifyTray-Android** 这是一个基于 Android 的悬浮音乐播放器框架,提供了诸如自由移动、自动回位等功能特性。它非常适合用来研究如何构建类似的浮窗应用。 2. **梨花带雨音乐播放器 V3** 主打网页端解决方案,解决了多个平台兼容性和歌词同步等问题[^2][^3]。此版本不仅修正了一些常见 bug ,而且开放了源代码供开发者学习借鉴。 3. **某易云API悬浮音乐播放器** 利用了网易云音乐公开接口制作而成,简单易用只需更改少量配置就能适配不同网站需求[^4]。该项目特别适合初学者快速上手实践。 ```javascript // 示例:简单的 JS 脚本控制 div 浮动位置 document.addEventListener('DOMContentLoaded', function() { const playerDiv = document.getElementById('musicPlayer'); let offsetX = 0; let offsetY = 0; playerDiv.onmousedown = function(e){ e.preventDefault(); var startX = e.clientX - parseInt(playerDiv.style.left); var startY = e.clientY - parseInt(playerDiv.style.top); document.onmousemove = function(event){ playerDiv.style.left = event.clientX - startX + 'px'; playerDiv.style.top = event.clientY - startY + 'px'; }; document.onmouseup = function(){ document.onmousemove = null; }; } }); ``` 上述脚本展示了基本的鼠标拖放功能实现方式,在实际项目里还需要考虑更多边界条件处理如超出屏幕范围限制等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值