立即注册
查看: 3141|回复: 2

[原创] 展讯智能开发笔记分享:系统分辨率的修改

已绑定手机
发表于 2013-6-19 17:14:57 | 显示全部楼层 |阅读模式 来自 广东省深圳市
分辨率修改涉及两个概念:密度和尺寸
每个项目密度定义路径:
customize/customer_cfg/sp8810ga/res/system.prop
# 1 => add volume control in in-call screen
ro.sprd.volume_control_icon = 1
#LCD_Density for WGVA
ro.sf.lcd_density = 240
dalvik.vm.heapsize=32m
ro.opengles.version=131072
搜索ro.sf.lcd_density关键字,
device/samsung/system.prop,vendor/sprd/hsdroid/system.prop
也有定义!
验证结果:
最终生成的build.prop文件
#LCD_Density for WVGA
ro.sf.lcd_density = 240
来自customize下的修改值!
手机目录system/build.prop通过adb导出来,
修改其中的值,再push进相应目录下的build.prop,重新开机,显示预先效果!
尺寸修改:
Frameworks/base/core/java/Android/content/res/CompatibilityInfo.java

    public static final int DEFAULT_PORTRAIT_WIDTH = 320;

    public static final int DEFAULT_PORTRAIT_HEIGHT = 480;
四组数据效果比较:
1)、正常效果:
DEFAULT_PORTRAIT_WIDTH = 320;DEFAULT_PORTRAIT_HEIGHT = 480;ro.sf.lcd_density = 240;
2)、正常效果:
DEFAULT_PORTRAIT_WIDTH = 480;DEFAULT_PORTRAIT_HEIGHT = 800;ro.sf.lcd_density = 240;
3)、界面显示正常,系列显示图标变小:
DEFAULT_PORTRAIT_WIDTH = 480;DEFAULT_PORTRAIT_HEIGHT = 800;ro.sf.lcd_density = 160;
4)、部分界面显示不全(如锁),系列显示图标变小:
DEFAULT_PORTRAIT_WIDTH = 320;DEFAULT_PORTRAIT_HEIGHT = 480;ro.sf.lcd_density = 160;
结论:
ro.sf.lcd_density影响分辨率的关键因素,
目前四个等级的屏幕密度等级,
决定每个APK选取res下的不同资源文件。
如主流屏幕drawable-hdpi(密度240)、drawable-mdpi(密度160)等;
相关说明:
frameworks/base/core/java/android/util/DisplayMetrics.java
private static int getDeviceDensity() {
        // qemu.sf.lcd_density can be used to override ro.sf.lcd_density
        // when running in the emulator, allowing for dynamic configurations.
        // The reason for this is that ro.sf.lcd_density is write-once and is
        // set by the init process when it parses build.prop before anything else.
        return SystemProperties.getInt("qemu.sf.lcd_density",
                SystemProperties.getInt("ro.sf.lcd_density", DENSITY_DEFAULT));
    }
frameworks/base/services/surfaceflinger/DisplayHardware/DisplayHardware.cpp
    #
    if (property_get("qemu.sf.lcd_density", property, NULL) <= 0) {
        if (property_get("ro.sf.lcd_density", property, NULL) <= 0) {
            LOGW("ro.sf.lcd_density not defined, using 160 dpi by default.");
            strcpy(property, "160");
        }
    } else {
    #   
        mDpiX = mDpiY = atoi(property);
    }
上面表示:
如果没有设置ro.sf.lcd_density的值,那么选择DENSITY_DEFAULT的默认定义;
再看DENSITY_DEFAULT定义处:

    #
    public static final int DENSITY_LOW = 120;
    #
    public static final int DENSITY_MEDIUM = 160;
    #
    public static final int DENSITY_HIGH = 240;
    #
    public static final int DENSITY_XHIGH = 320;
    #
    public static final int DENSITY_DEFAULT = DENSITY_MEDIUM
发表于 2014-4-21 18:04:12 | 显示全部楼层 来自 北京市
这个是分辨率密度修改吧
发表于 2014-4-22 08:21:40 | 显示全部楼层 来自 美国 Emagine
谢谢,看一下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表