densitydpi density dpi dip px

densitydpi density dpi dip px


1. 术语和概念

术语

说明

备注

Screen size(屏幕尺寸)

指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸

摩托罗拉milestone手机是3.7英寸

Aspect Ratio(宽高比率)

指的是实际的物理尺寸宽高比率,分为longnolong

Milestone169,属于long

Resolution(分辨率)

和电脑的分辨率概念一样,指手机屏幕纵、横方向像素个数

Milestone854*480

DPI(dot per inch)

每英寸像素数,如120dpi,160dpi,假设QVGA(320*240)分辨率的屏幕物理尺寸是(2英寸*1.5英寸),dpi=160

可以反映屏幕的清晰度,用于缩放UI

Density(密度)

屏幕里像素值浓度,resolution/Screen size可以反映出手机密度

 

Density-independent pixel (dip)

指的是逻辑密度计算单位,dip和具体像素值的对应公式是dip/pixel=dpi/160

 


2、换算关系

1)DPI就是DOT PER INCH 


每英寸象素数 

1英寸=2.54厘米 
不是说600万象素用多少DPI打,一般照片的DPI都是固定的,比如大多数机器都设定为72,那么600万象素的照片长是3400象素,每英寸72象素,那么打印出来就是长47英寸,合119厘米,大约1.2米,明白了哦?很大的一副画呢 ,当然这也不现实,所以要调高DPI值,或者减小你的照片分辨率,以达到最佳尺寸. 额外给个建议,你调整DPI不如直接调整分辨率

dpi和像素、厘米、英寸之间的关系和换算及CSS中的长度单位(转)

首先告诉大家一个不幸的消息:像素不能直接换算成英寸、厘米,要在dpi下才能换算!

photoshop中两种分辨率换算
72像素/英寸=28.346像素/厘米
300像素/英寸=118.11像素/厘米

2)dip = (dpi/160)*pixel.(所以dip可能比像素更大或更小)

3、名词关系
一般我们就直接把dpi与密度理解成一致的概念。
分辨率理解成与像素一样的概念。
其他都可以通过尺寸与像素计算出来。

<think> 首先,用户的问题是关于在Android 7.0系统代码中修改DPI值的方法。DPIDensity Independent Pixels的缩写,指的是密度无关像素,在Android中用于确保UI元素在不同屏幕密度设备上显示一致。 回顾系统级指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题,保证真实可靠。 用户提供了三个引用: - 引用[1]解释了dippx的换算关系:以160dpi为基准,1dip=1px,如果密度是320dpi,则1dip=2px,以此类推。 [^1] - 引用[2]谈到了提供独立于源代码的资源能力,比如为不同设备配置提供可替换资源,例如语言字符串。 [^2] - 引用[3]是关于Intent在Android中的使用,帮助组件访问。 [^3] 用户真正的需求是修改Android 7.0系统代码中的DPI值。DPI值通常与设备屏幕密度相关,在Android中是通过density值来控制的。 在Android系统中,DPI值可以在系统级别修改,这通常需要修改框架代码或配置文件。Android 7.0对应API级别24(Nougat)。 步骤: 1. **理解DPI在Android中的位置**:DPI值通常在frameworks/base/core/java/android/util/DisplayMetrics.java文件中定义,或者通过系统属性设置。 2. **修改方法**: - **修改系统属性**:可以通过设置ro.sf.lcd_density系统属性来修改DPI。这通常在设备启动时读取。 - **代码修改**:在Android源代码中,可以修改frameworks/base/core/jni/android_util_DisplayMetrics.cpp或相关Java文件。 - **通过build.prop**:在编译时或运行时修改build.prop文件中的ro.sf.lcd_density值。 3. **针对Android 7.0**:Android 7.0使用类似机制。用户需要访问系统源代码。 4. **用户可能没有源代码**:如果用户只是普通用户,修改系统代码可能需要root权限或自定义ROM。但用户指定了“系统代码”,所以假设他们有源代码。 回答结构: - 逐步引导用户。 - 使用清晰的中文。 - 引用相关部分:如引用[1]解释了DPI的重要性,引用[2]提到了资源替换,但DPI修改可能涉及更深层次。 - 生成相关问题。 关键点: - DPI修改通常在系统级别,通过修改系统属性或框架代码。 - 在Android 7.0中,具体方法: - 修改ro.sf.lcd_density在build.prop或default.prop。 - 或者修改DisplayMetrics中的密度值。 确保真实可靠: - 基于Android开发知识,ro.sf.lcd_density是标准属性用于设置物理DPI。 - 在设备上,可以通过adb shell设置,但持久化需要修改系统文件。 生成相关问题: - 例如,关于如何应用修改、测试效果、兼容性问题等。 最终回答框架: 1. 介绍DPI在Android中的作用,引用[1]。 2. 解释修改方法:系统属性修改。 3. 详细步骤:如果用户有源代码,修改build.prop或代码。 4. 注意事项:需要重新编译系统,可能需要root。 5. 添加引用标识。 6. 生成相关问题。 </think>### 在 Android 7.0 系统代码中修改 DPI 值的方法 在 Android 开发中,DPIDensity Independent Pixels)是密度无关像素,用于确保 UI 元素在不同屏幕密度的设备上一致显示。修改系统 DPI 值通常涉及调整系统属性或修改框架代码。Android 7.0(Nougat)的系统代码中,DPI 值主要通过 `ro.sf.lcd_density` 系统属性控制。以下是详细的修改方法: #### 步骤 1: 理解 DPI 的作用机制 - DPI 值定义了像素密度基准(以 160dpi 为标准),例如在 320dpi 设备上,1dp 等于 2px [^1]。 - 修改 DPI 会影响全局 UI 缩放,包括布局、字体大小等。在 Android 7.0 中,DPI 值存储在 `DisplayMetrics` 类中,但持久化修改需通过系统属性实现。 #### 步骤 2: 修改系统属性 `ro.sf.lcd_density` 这是最常见且推荐的方法,通过修改系统配置文件或代码: - **修改 `build.prop` 文件**: 1. 在 Android 源代码目录中,定位到 `device/<manufacturer>/<device>/system.prop` 或 `build.prop` 文件(例如,`device/google/marlin/system.prop`)。 2. 添加或修改以下行,设置目标 DPI 值(例如 480): ``` ro.sf.lcd_density=480 ``` 3. 保存文件并重新编译系统: ```bash make clean && make -j8 ``` 4. 刷入新编译的系统镜像到设备。 - **通过代码动态修改**(需框架层修改): 1. 在 `frameworks/base/core/java/android/util/DisplayMetrics.java` 中,可以找到 DPI 初始化逻辑。 2. 在 `setTo()` 或 `setToDefaults()` 方法中,添加代码覆盖默认值(但需注意系统稳定性): ```java public void setToDefaults() { // 修改默认值,例如改为 480dpi density = 480.0f / DisplayMetrics.DENSITY_DEFAULT; densityDpi = 480; // 设置目标 DPI scaledDensity = density; xdpi = 480; ydpi = 480; } ``` 3. 重新编译框架模块: ```bash mmm frameworks/base ``` #### 步骤 3: 验证修改效果 - 在设备上运行后,通过 ADB 检查 DPI 值: ```bash adb shell getprop ro.sf.lcd_density ``` - 或在代码中打印 `DisplayMetrics.densityDpi` 值确认。 #### 注意事项 - **系统权限要求**:修改系统代码需要完整 AOSP(Android Open Source Project)环境和编译权限。普通应用无法修改全局 DPI,需系统级访问。 - **兼容性风险**:修改 DPI 可能导致 UI 错位或应用兼容性问题。建议在资源文件中使用密度限定符(如 `res/values-hdpi/`)替代直接修改系统值,以实现设备适配 [^2]。 - **Android 7.0 特定性**:API 级别 24 中,`ro.sf.lcd_density` 是标准属性。如果使用模拟器,可通过 AVD Manager 直接设置 DPI。 - **恢复默认**:若修改失败,恢复 `ro.sf.lcd_density` 为设备原始值(通常 160-640 范围内)。 通过以上方法,您可以在 Android 7.0 系统代码中有效调整 DPI 值。如果需要进一步优化 UI 适配,可结合资源覆盖机制 [^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值