精华内容
下载资源
问答
  • 鸿洋android屏幕适配四部曲-传送门 Android 屏幕适配方案 https://blog.csdn.net/lmj623565791/article/details/45460089 Android 百分比布局库(percent-support-lib) 解析与扩展 ... An...

    鸿洋android屏幕适配四部曲-传送门

    两分钟理解Android中PX、DP、SP的区别

    https://blog.csdn.net/donkor_/article/details/77680042

    屏幕分辨率查询

    这样,我尝试用一句话来说明白px和dp的关系,以及为什么要使用两种单位。
    android手机市场因为还没有完全垄断的企业出现,所以屏幕的种类相当多,所以需要一种自适应单位,让同一个单位长度在所有手机上显示的物理尺寸完全一样(注意,是物理尺寸,举个例子,希望实现同一个长度在所有手机上显示的长度都为1厘米,这样的效果),这样的效果单纯使用px是不可能达到的,所以才需要引入dp。看一下公式:

    – PPI = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数
    – dp*ppi/160 = px。比如1dp x 320ppi/160 = 2px

    再明白不过了,ppi是两者之间的桥梁,那么ppi是什么呢,是屏幕上对角线上每一英寸所对应的像素数目。通过ppi就能将屏幕像素和实际物理长度进行挂钩了。那么为什么还需要一个160参数呢?我尝试揣摩设计者的初衷,我们在设计界面,设定长度的时候往往希望设定整数值对吧,设定个0.0023这种长度其实很尴尬的不是吗,所以取了一个折衷值,让dp值既不会太大也不会太小。

    Android 屏幕适配方案

    https://blog.csdn.net/lmj623565791/article/details/45460089

    Android 百分比布局库(percent-support-lib) 解析与扩展

    https://blog.csdn.net/lmj623565791/article/details/46695347

    Android 增强版百分比布局库 为了适配而扩展

    https://blog.csdn.net/lmj623565791/article/details/46767825

    Android AutoLayout全新的适配方式 堪称适配终结者

    https://blog.csdn.net/lmj623565791/article/details/49990941

    展开全文
  • Android开发书籍推荐:从入门到精通系列学习路线书籍介绍 作者:kunga0814 很多时候我们都会不断收到新手的提问“Android开发的经典入门教材和学习路线?”、“Android 开发入门教程有哪些推荐?”等类似的问题,...

    Android开发书籍推荐:从入门到精通系列学习路线书籍介绍

    作者:kunga0814

    很多时候我们都会不断收到新手的提问“Android开发的经典入门教材和学习路线?”、“Android 开发入门教程有哪些推荐?”等类似的问题,我们不断重复回答这些问题,这让我们萌生了做《[Android开发书籍推荐:从入门到精通系列学习路线书籍介绍》的想法,整理收集开发大牛的学习经验,以便让我们少走弯路,更快速成长。希望这个系列可以成为大家手头应对新手的好答案。

    JAVA基础的书籍:

    《Thinking in java》

    《Effective Java》

    汤涛推荐理由:第二本要反复多看几遍,另外Java学习还有个技巧,把各种代码检查工具报告的警告都正确处理掉,一个不漏,保证你成长飞快。

    stormzhang推荐理由:公认的Java进阶必备,《Effective Java》是一本实用至上的书,78条建议,满满的干货。

    袁辉辉推荐理由:《Thinking in java》:非常经典的Java书籍,有些人觉得这个书不适合初学者,可就是我看的第一个本Java书,或许是当初自学Java没有高人指点,便挑选了经典书来入手。看一本经典书,第一遍能理解个大概,能对整体有一个概念,这就可以了,反复多读几遍,细细咀嚼,每一遍都会有不同的领悟。

    1、Android入门:

    Android Training

    Android API Guides

    胡凯推荐理由:入门使用官方的这两份文档是最好不过的了,没有比这个更权威,更准确的Android学习资料了。中文书可以随便买两本入门,配合一起看看就好了。在实践的过程中多参考官方的Sample Code,多按照官方的推荐进行代码实践!

    汤涛推荐理由:官方文档,权威专业,入门不二之选,正确的入门姿势,对后续的成长帮助非常之大。

    《第一行代码》

    《疯狂Android讲义》

    《Android4高级编程》

    《Android编程权威指南》

    徐宜生推荐理由:全面、基础,内容丰富!基础类型的书只要看一本就够了,用来全面了解知识体系和结构,不用全部精读,只需要有概念即可。

    CJJ推荐理由:《第一行代码》作者郭霖,看了郭霖很多博客文章,每一篇都写的很详细,也很用心。这本书大概浏览了一遍,内容浅显易懂,非常适合初学者!
    任玉刚推荐理由:《第一行代码》作者郭霖,手把手教你入门,清晰易懂。

    袁辉辉推荐理由:《疯狂Android讲义》正是这样一本书,也是我看过的第一本Android书籍,书中并没有深奥的理论,有大量的实例,边看的过程中,边在电脑面前跟着敲了一遍实例代码,最好能做到理解性地敲,而非看一个单词再电脑面前敲一个。我大概花了一周时间把这本书看完并把大部分的实例代码都亲手敲了一遍。《第一行代码》作者郭霖,网上有不少人都推荐这本书作为Android入门书,我大概扫了一遍,知识点较基础,作者文笔不错,书中还穿插了不少打怪涨经验升级的片段,比较风趣。

    二、Android进阶

    《App研发录》

    《Android群英传》

    《深入理解Android》

    《Android开发艺术探索》

    《Android系统源代码情景分析》

    袁辉辉推荐理由:《深入理解Android》邓凡平,作者功力深厚,以情景为分支,从framework源代码层面来,深入分析Android系统,非常适合高级应用开发工程师和系统工程师阅读。《Android系统源代码情景分析 》罗升阳,对Android系统的理解非常深,老罗知识体系很全,文章从app/framework/native/kernel等全方面剖析,这是Android界的尽人皆知的大牛,“老罗栽树,大家乘凉”,非常值得一看,前提要是有扎实基础。

    stormzhang推荐理由:《Android开发艺术探索》这是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点,Android开发进阶值得拥有!

    任玉刚推荐理由:《Android开发艺术探索》,作者任玉刚。分析android核心知识点,直指高级工程师进阶要点!(作为艺术探索一书的读者,我也是激励推荐的!!非常赞的一本书!)

    《Clean Code》

    《Clean Coder》
    汤涛推荐理由:进阶是个大话题,只看一两本是不够的,甚至只看书也是不够的,能进阶到什么程度只能靠自己积极主动的积累。 硬要推荐的话,就不说 Android 的书了,市面上几本热门书都可以看看。这里推荐的两本,同一人所写,都有中文译本。教你代码怎么写得更好,以及怎么做一个更职业的程序员。

    《HeadFirst设计模式》

    《重构:改善既有代码的设计》
    胡凯推荐理由:在大量实践Android程序之后,我们需要会分辨哪种写法是更优秀的,通过重构来改善既有的代码,通过设计模式的不断理解实践对既有的框架进行优化,追求更加设计良好的程序。

    三、Android底层

    《深入理解Android ***》系列书籍,邓凡平老师写的系列。

    《Android源码设计模式》,结合设计模式分析源码

    《Android框架揭秘》,底层架构的一本好书

    徐宜生推荐理由:底层书籍对于应用开发者来说,不用过于深入,主要用于学习设计思路和了解底层设计机制

    《Linux内核设计与实现》

    《深入理解Linux内核》

    袁辉辉推荐理由:Android底层是基于Linux Kernel,所以想成为Android全栈工程师,了解Linux Kernel是非常有必要的。这方面书籍较多,我就列举两本《Linux内核设计与实现》,《深入理解Linux内核》。第一阶段只需加深对Android系统整体性的理解,不必拘泥于每个细节都理解,看完能大抵理解kernel进程的管理和调度机制,内存管理和内存寻址,I/O驱动设备(字符设备、块设备、网络设备)和调度机制等有所了解就够了;如果都理解了也就够了,如果想再深入,可以结合Kernel代码多看两遍。

    名人推荐Android经典入门教程

    胡凯:腾讯公司天天P图资深Android开发工程师,Android官方培训课程中文版发起人。

    1、入门:

    Android API Guides

    Android Training

    推荐原因:入门使用官方的这两份文档是最好不过的了,没有比这个更权威,更准确的Android学习资料了。中文书可以随便买两本入门,配合一起看看就好了。在实践的过程中多参考官方的Sample Code,多按照官方的推荐进行代码实践!

    2、进阶:

    《重构:改善既有代码的设计》

    《HeadFirst设计模式》

    推荐原因:在大量实践Android程序之后,我们需要会分辨哪种写法是更优秀的,通过重构来改善既有的代码,通过设计模式的不断理解实践对既有的框架进行优化,追求更加设计良好的程序。

    3、JAVA基础的书籍:

    《Thinking in java》

    《Effective Java》

    推荐原因:不解释

    写在最后:请做一个对代码美感有追求的程序员。

    汤涛:海豚浏览器资深Android工程师,“Android程序员”微信号博主;

    1、入门:

    Android Training

    推荐原因:官方文档,权威专业,入门不二之选,正确的入门姿势,对后续的成长帮助非常之大。

    2、进阶:

    《Clean Code》

    《Clean Coder》

    推荐原因:进阶是个大话题,只看一两本是不够的,甚至只看书也是不够的,能进阶到什么程度只能靠自己积极主动的积累。 硬要推荐的话,就不说 Android 的书了,市面上几本热门书都可以看看。这里推荐的两本,同一人所写,都有中文译本。教你代码怎么写得更好,以及怎么做一个更职业的程序员。

    3、Java

    《Thinking in java》

    《Effective Java》

    推荐原因:不解释。尤其第二本要反复多看几遍,另外Java学习还有个技巧,把各种代码检查工具报告的警告都正确处理掉,一个不漏,保证你成长飞快。

    最后:入门有方法,进阶靠自己。

    stormzhang:薄荷网Android技术负责人,AndroidDeveloper公众号博主。

    书不在多,每个阶段一本书就够了,所以我只推荐一本:《Java初级:Java语言程序设计》

    理由:很基础,适合初学者,建议看到前十四章就可以了,第十二章也可以略过。

    Java中级:

    《Thinking in java》

    Java经典书籍,很多人说他是初级书籍,但是我的看法是他非常不适合初学者,如果没有任何经验的初学者直接看这本书会一头雾水,但是有了一定Java基础那么这本书必看。

    Java进阶:

    《Effective Java》

    公认的Java进阶必备,这是一本实用至上的书,78条建议,满满的干货。

    Android初级 :

    《第一行代码》

    郭神的书,全书由浅入深,很系统全面,讲解的也很详细,非常适合Android入门。

    Android进阶:

    《Android开发艺术探索》

    这是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点,Android开发进阶值得拥有!

    袁辉辉:小米系统攻城狮,Gityuan博主。

    一、Android入门:对于入门书,最重要的是能够让初学者快速上手,而不在于能将所有知识点讲述深入透彻。

    《疯狂Android讲义》正是这样一本书,也是我看过的第一本Android书籍,书中并没有深奥的理论,有大量的实例,边看的过程中,边在电脑面前跟着敲了一遍实例代码,最好能做到理解性地敲,而非看一个单词再电脑面前敲一个。我大概花了一周时间把这本书看完并把大部分的实例代码都亲手敲了一遍。

    《第一行代码》:作者郭霖,网上有不少人都推荐这本书作为Android入门书,我大概扫了一遍,知识点较基础,作者文笔不错,书中还穿插了不少打怪涨经验升级的片段,比较风趣。

    对于入门书最多看一到两本,当看到第三本能吸取的营养已经很少,这样应该进入下一个进阶阶段。

    **二、Android进阶:**进阶书籍适合反复阅读,深入理解。

    《深入理解Android》:邓凡平,作者功力深厚,以情景为分支,从framework源代码层面来,深入分析Android系统,非常适合高级应用开发工程师和系统工程师阅读。

    《Android系统源代码情景分析 》:罗升阳,对Android系统的理解非常深,老罗知识体系很全,文章从app/framework/native/kernel等全方面剖析,这是Android界的尽人皆知的大牛,“老罗栽树,大家乘凉”,非常值得一看,前提要是有扎实基础。

    《深入解析Android 5.0系统》:邓超,前两本都是基于Android 4.x系统,而这是基于Android 5.0系统讲述得比较不错的书籍。

    Android底层是基于Linux Kernel,所以想成为Android全栈工程师,了解Linux Kernel是非常有必要的。这方面书籍较多,我就列举两本《Linux内核设计与实现》,《深入理解Linux内核》。第一阶段只需加深对Android系统整体性的理解,不必拘泥于每个细节都理解,看完能大抵理解kernel进程的管理和调度机制,内存管理和内存寻址,I/O驱动设备(字符设备、块设备、网络设备)和调度机制等有所了解就够了;如果都理解了也就够了,如果想再深入,可以结合Kernel代码多看两遍。

    **三、Java基础:**学习Android必须要有一定的Java基础

    《Java编程思想》:非常经典的Java书籍,有些人觉得这个书不适合初学者,可就是我看的第一个本Java书,或许是当初自学Java没有高人指点,便挑选了经典书来入手。看一本经典书,第一遍能理解个大概,能对整体有一个概念,这就可以了,反复多读几遍,细细咀嚼,每一遍都会有不同的领悟。

    任玉刚:百度Android高级工程师,《Android开发艺术探索》作者,CSDN博客专家。

    Android入门书 :

    《第一行代码》:作者郭霖。手把手教你入门,清晰易懂。

    Android进阶书 :

    《Android开发艺术探索》,作者任玉刚。分析android核心知识点,直指高级工程师进阶要点!(作为艺术探索一书的读者,我也是激励推荐的!!非常赞的一本书!)

    CJJ:写小说的Android工程师,Android自定义控件达人,活跃在Github上,AndroidSDK源码解析发起者!他的Github。

    Android入门书 :

    《第一行代码》:作者郭霖。推荐理由:看了郭霖很多博客文章,每一篇都写的很详细,也很用心。这本书大概浏览了一遍,内容浅显易懂,非常适合初学者!

    Android进阶书 :

    《Android开发艺术探索》,作者任玉刚。我最近也在看这本书,收获很大,巩固了以前比较薄弱的地方,也知道还有那些知识需要学好,是进阶的好书!

    《Android系统源代码情景分析》,作者罗升阳。推荐理由:国内学安卓的第一批先驱者,至今他的很多文章都看不懂,惭愧啊,这本书是他的心血,只是,读懂这本书需要很好的基础,大概吧!

    徐宜生:上海沪江英语高级Android工程师,《Android群英传》作者。

    Android入门书 :

    《Android4高级编程》

    《第一行代码》

    《Android编程权威指南》

    推荐理由:全面、基础,内容丰富!基础类型的书只要看一本就够了,用来全面了解知识体系和结构,不用全部精读,只需要有概念即可

    Android进阶书 :

    《Android群英传》,总结从入门到提高的学习方法

    《Android开发艺术探索》,进阶必备知识点的深入讲解

    《App研发录》,研发体系的深入研究与总结

    推荐理由:进阶类书籍需要好好精读,针对自己薄弱的知识点不断进行总结

    Android底层书 :

    《深入理解Android 》系列书籍,邓凡平老师写的系列。

    《Android源码设计模式》,结合设计模式分析源码

    《Android框架揭秘》,底层架构的一本好书

    推荐理由:底层书籍对于应用开发者来说,不用过于深入,主要用于学习设计思路和了解底层设计机制

    Stay:有心课堂前台

    选择当下最适合自己的最重要。

    初学Android
    对于一个初学者,最大的障碍在于如何用好ide以及项目结构。每一本入门书都绕不开这一个环节。这样的书需要越新越好。因为ide版本也在不断升级,一些changelog会让初学者卡住。这里不做推荐,只要找最新出版的书就可以了。

    有了Android工作的1年里
    一个良好的积累来源于平日的知识吸收。量变会引起质变。这个时间段,多吸收点知识是必要的。从量上首当其冲的就是API文档了,其次就是[《第一行代码》] 了。再来就是郭霖和鸿洋的博客了。能把一个知识点从浅入深的讲解成API文档,也只有他们俩了。

    未来的1到2年
    积累到一定程度,就需要不断的通过实战来补充经验。Android以坑多,黑科技著称。没在坑里滚过的都不叫真的android程序员。如果有本书能帮你快速理出这些坑。那就是[《App研发录》]了。虽然里面也有些写的不那么准确的问题,但这不碍事。

    2-3年
    坑也淌的不少了。也许你曾为了解决某个bug,花了好几天google遍了,源码翻烂了都没能解决。这时候就得考虑考虑,是否应该从原理入手去分析问题。一个component或者一个API是通过怎样的需求来定制实现的。如果你能从原理上去理解意图,那在解决问题时会更有方向,而不会想无头苍蝇。《Android开发艺术探索》应该就是你需要的书。它虽然没有帮你具体的解决某个bug,但是它给了你一个宏观的构图。以后你会事半功倍。

    3年以后

    你已经是个合格的开发者了。一些问题都不会再难倒你。但是你在一个team里与大家协作。如何编写高质量,可复用的代码是一生的追求。这类书籍有很多,从具体的《Effective Java》到抽象的《HeadFirst设计模式》再到心中无码的《敏捷软件开发:原则、模式与实践》《重构》再回归到本质《编程珠玑》。这都是不错的选择。

    并行

    1. 多尝试其他语言,了解其他语言的优点与特性,与android相互印证。是非常有必要的。

    2. 可以尝试从非技术角度来看技术。《暗时间》 《精进,如何成为一个厉害的人》 都推荐大家看看。高效来自于自我认知

    看书的目的,是系统的理解某一相对独立的点与面。尽量抽整块的时间来消化,别像看博客,公众号那样,手指一划一页就翻没了。没有真正的思考与实践,就不叫真的理解。平时那些碎片知识如果能通过系统的书籍来整理,是对我们的知识体系的梳理与巩固。

    至于那些还不能消化高阶体系的朋友也不用强求,这是一个过程。先知其然,再去知其所以然。选当下最适合自己的,一步步进阶,不是更好吗:)
    我在Android工作的第12个年头里,也搜集了不少好的书籍的电子版,在这里,我愿意分享给大家,希望对大家有帮助!

    1.Android进阶学习全套手册

    2.Android高级架构师进阶知识体系图

    3.Android对标阿里P7学习视频

    4.BATJ大厂Android高频面试题

    点击即可领取 【Android高级架构师

    展开全文
  • 鸿洋Android 面试要点答案整理

    千次阅读 2016-07-18 20:31:36
    Android系统如何在多个资源文件夹下查找匹配最合适的资源 2.3 虚拟机 Java内存模型 Android虚拟机的特点 Dalvik和Art的区别 熟悉垃圾回收的实现机制,了解虚拟机的GC类型 2.4 View相关 常用组件的...

    信息来源:
    http://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650820648&idx=1&sn=cb9ee924f2ded3358dd6c256803cc687&scene=0#wechat_redirect

    以下问题是引用鸿神的文章:

    1、Java技术

    1.1 Java基础

    对抽象、继承、多态的理解
    JAVA的抽象、封装、继承、多态 http://blog.csdn.net/xieqian923/article/details/8183363

    泛型的作用及使用场景
    http://www.cnblogs.com/lwbqqyumidi/p/3837629.html
    枚举的特点及使用场景
    http://www.jb51.net/article/78351.htm
    线程sleep和wait的区别
    JAVA反射机制
    weak/soft/strong引用的区别
    Object的hashCode()与equals()的区别和作用
    http://www.360doc.com/content/14/0527/09/15113968_381327452.shtml

    1.2 集合类

    JAVA常用集合类功能、区别和性能
    并发相关的集合类
    部分常用集合类的内部实现方式

    1.3 多线程相关

    Thread、Runnable、Callable、Futrue类关系与区别
    JDK中默认提供了哪些线程池,有何区别
    线程同步有几种方式,分别阐述在项目中的用法
    在理解默认线程池的前提下,自己实现线程池

    1.4 字符

    String的不可变性
    StringBuilder和StringBuffer的区别
    字符集的理解:Unicode、UTF-8、GB2312等
    正则表达式相关问题

    1.5 注解

    注解的使用
    注解的级别及意义
    如何自定义注解

    2、Android技术

    2.1 Android基础

    四大组件的意义及使用,生命周期回调及意义
    Android四大基本组件介绍与生命周期 http://www.cnblogs.com/bravestarrhu/archive/2012/05/02/2479461.html
    AsyncTask、Handler的使用
    Android系统层次框架结构
    AsyncTask的实现方式
    AsyncTask使用的时候应该注意什么
    Android常见的存储方式
    Looper、Handler和MessageQueue的关系
    Activity的启动流程(考察对Framwork的熟悉程度)
    多进程开发的注意事项(Application类区分进程,进程间内存不可见、进程间通讯方式)

    2.2 Resource相关

    .9图片的意义
    style和theme的作用及用法
    答:
    正确使用 Android 的 Theme 和 Style http://www.tuicool.com/articles/ZjEZFj
    dpi、sp、px的区别以及转换关系
    raw和assets文件夹的作用,二者有何区别
    Android系统如何在多个资源文件夹下查找匹配最合适的资源

    2.3 虚拟机

    Java内存模型
    Android虚拟机的特点
    Dalvik和Art的区别
    熟悉垃圾回收的实现机制,了解虚拟机的GC类型

    2.4 View相关

    常用组件的使用:ListView、RecyclerView及Adapter的使用
    View之间的继承关系
    Invalidate与postInvalidate的区别
    自定义View的实现方式(根据项目经验询问相关组件)。
    onMeasure/onLayout/onDraw的作用
    Paint、Matrix、Shader等绘制相关类的方法作用
    详细描述事件分发机制

    2.5 动画

    Android有哪些动画的实现方式
    Interpolator类的意义和常用的Interpolator
    ViewAnimation与属性动画有什么区别
    如何自定义ViewAnimation
    属性动画的实现原理

    2.6 图片处理

    一般项目中如何加载大图
    图片压缩的方式
    如何不压缩图片加载高清图
    图片加载过程中,一般会使用缓存,这个缓存的主要作用是什么
    谈谈自己熟悉的图片加载框架

    3、项目经验

    3.1 开发工具

    代码管理工具:SVN、Git
    常用的调试工具:Hierarchy Viewer、DDMS等
    CI工具:Lint检查,FindBugs、Jenkins
    内存分析工具:dumpsys、memoinfo、MAT

    3.2 项目工程

    APP更新策略:推送或者拉取?
    如何统一处理错误崩溃
    如何进行用户行为收集
    日志管理有哪些要点?(Debug包开放,release包关闭,错误日志反馈)
    打包方式Ant、Maven、Gradle
    机型适配情况

    3.3 开放平台

    是否使用过第三方平台
    常用开放平台的熟悉度(微信、QQ、微博、支付宝等常用的支付和分享)
    是否进行过对第三方平台的统一封装?
    是否自己开发过SDK?

    3.4 设计相关

    有哪些常用的设计模式、设计原则
    设计模式在Android源码中的应用
    设计模式在项目中的应用
    项目中的分包方式
    MVC在android中的应用,利弊
    android项目中的常见层次结构,包划分
    有没有设计过项目中的层级结构、包划分

    4、wyyl1的补充

    线程和进程的区别
    dp、sp、APPUI设计中的48dp定律原则

    Android TouchEvent事件传递机制
    http://blog.csdn.net/morgan_xww/article/details/9372285/

    TCP/IP、Http、Socket的区别
    http://blog.csdn.net/skyboy11yk/article/details/24304461

    展开全文
  • Android适配遇到很多麻烦: 设计图单位px而我们需要dp 一般网页都提供百分比计算,手机没那么幸运,需要动动脑洞 下面将主要介绍几种解决手机屏幕适配的几种方案一、方案一:dp(独立像素密度)首先看这个公式:由这...

    Android适配遇到很多麻烦:

    • 设计图单位px而我们需要dp
    • 一般网页都提供百分比计算,手机没那么幸运,需要动动脑洞

    下面将主要介绍几种解决手机屏幕适配的几种方案

    一、方案一:dp(独立像素密度)

    首先看这个公式:

    这里写图片描述

    由这公式知道:

    • 手机屏幕密度(每英寸打印的像素点数dpi)标准160dip–>1dp对应1px,屏幕密度(dpi)越大1dp对应的像素px越多
    • 实际,1dp大约等于1/160inch,如button宽高为160dp*160dp,那么这个button在任何分辨率的屏幕中显示的尺寸大小大约是一致的(可能不精确)大概是1inch*1inch.
      但是这样并不能解决所有的适配问题
      1、呈现效果仍旧会有差异,仅仅是相近而已
      2、当设备的物理尺寸存在差异的时候,dp就显得无能为力了。为4.3寸屏幕准备的UI,运行在5.0寸的屏幕上,很可能在右侧和下侧存在大量的空白。而5.0寸的UI运行到4.3寸的设备上,很可能显示不下。

    总结:
    dp与像素无关,dp能让同一数值在不同分辩率展示出大致相同的尺寸大小,但是当设备尺寸差异较大的时候,就无能为力了(这时可以建立不同规格的资源文件解决)

    编写多套数字文件

    <?xml version="1.0" encoding="utf-8"?>  
    <resources>  
        <!-- values-hdpi 480X800 -->  
        <dimen name="imagewidth">120dip</dimen>      
    </resources>  
    
    <resources>  
        <!-- values-hdpi-1280x800 -->  
        <dimen name="imagewidth">220dip</dimen>      
    </resources>  
    
    
    <?xml version="1.0" encoding="utf-8"?>  
    <resources>  
        <!-- values-hdpi  480X320 -->  
        <dimen name="imagewidth">80dip</dimen>      
    </resources> 

    由此我们推出百分比,并用一键生成资源文件法创建不同规格的数字文件

    方案二、百分比

    手机百分比适配就是让控件都参考屏幕的百分比计算宽高。

    比如我现在有个需求想让控件显示的高度为屏幕的高度的1/4,
    不用百分比的话实现方式两种

    • 1、代码去动态计算(很多人直接pass了,太麻烦)
    • 2、利用weight(weight必须依赖Linearlayout,而且并不能适用于任何场景)

    上面的需求dp这个是不能完成的我么希望这样写
    利用屏幕的宽和高的比例去定义View的宽和高。

      <Button
            android:text="@string/hello_world"
            android:layout_width="20%w"
            android:layout_height="10%h"/>

    很多使用百分比的情形:

    • match_parent (相当于100%参考父控件)
    • weight(按百分比分配空间)
    • 自定义view解决(里面多数尺寸是百分比计算的)

    究极解决方案

    现在我们要实现根据UI给的设计图px,然后既能照抄设计图px又能应用百分比适配所有机型,

    原理解释
    其实我们的解决方案,就是在项目中针对你所需要适配的手机屏幕的分辨率各自建立一个文件夹。

    这里写图片描述
    假如UI给你的设计图单位是以480*320为规格的的px,那么我们就以480*320的分辨率为基准,把任何分辨率不同规格,都分为宽320份高480份
    建立资源文件夹values-480*320,这文件里的尺寸(1px就对应x1…以此类推)

    <dimen name="x1">1.0px</dimen>
    <dimen name="x2">2.0px</dimen>
    .
    .
    <dimen name="x320">320px</dimen>

    其他规格按比例对应如:800*480的宽度480我们对应:

    <dimen name="x1">1.5px</dimen>
    <dimen name="x2">3.0px</dimen>
    .
    .
    <dimen name="x320">480px</dimen>

    有人问了这TM怎么算了,好吧看下面吧—>
    x1 = 480 / 基准 = 480 / 320 = 1.5 ;就是这么算的,其他一样的哈

    有人又要问了,我一个个去算,一个个去写吗,肯定不是啊,我们是万能的程序员啊,哈

    下面就是模板工具使用步骤了

    (1)应用jar包生成资源文件

    本jar默认基准为480*320,双击jar就可生成对应的文件,如果设计图给的替他规格不要虚,
    例如:基准 1280 * 800 ,额外支持尺寸:1152 * 735;4500 * 3200;
    jar包地址

    下载jar包并在
    cmd打开jar所在目录;
    F:\yb>java -jar autolayout.jar 800 1280 735,1152_3200,4500
    按照下面格式:

    Java -jar xx.jar width height width,height_width,height 

    就可生成想要的res文件把这些文件拷贝到studio对应的目录即可。
    jar包的源代码

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.PrintWriter;
    
    
    public class GenerateValueFiles {
    
        private int baseW;
        private int baseH;
    
        private String dirStr = "./res";
    
        private final static String WTemplate = "<dimen name=\"x{0}\">{1}px</dimen>\n";
        private final static String HTemplate = "<dimen name=\"y{0}\">{1}px</dimen>\n";
    
        /**
         * {0}-HEIGHT
         */
        private final static String VALUE_TEMPLATE = "values-{0}x{1}";
    
        private static final String SUPPORT_DIMESION = "320,480;480,800;480,854;540,960;600,1024;720,1184;720,1196;720,1280;768,1024;800,1280;1080,1812;1080,1920;1440,2560;";
    
        private String supportStr = SUPPORT_DIMESION;
    
        public GenerateValueFiles(int baseX, int baseY, String supportStr) {
            this.baseW = baseX;
            this.baseH = baseY;
    
            if (!this.supportStr.contains(baseX + "," + baseY)) {
                this.supportStr += baseX + "," + baseY + ";";
            }
    
            this.supportStr += validateInput(supportStr);
    
            System.out.println(supportStr);
    
            File dir = new File(dirStr);
            if (!dir.exists()) {
                dir.mkdir();
    
            }
            System.out.println(dir.getAbsoluteFile());
    
        }
    
        /**
         * @param supportStr
         *            w,h_...w,h;
         * @return
         */
        private String validateInput(String supportStr) {
            StringBuffer sb = new StringBuffer();
            String[] vals = supportStr.split("_");
            int w = -1;
            int h = -1;
            String[] wh;
            for (String val : vals) {
                try {
                    if (val == null || val.trim().length() == 0)
                        continue;
    
                    wh = val.split(",");
                    w = Integer.parseInt(wh[0]);
                    h = Integer.parseInt(wh[1]);
                } catch (Exception e) {
                    System.out.println("skip invalidate params : w,h = " + val);
                    continue;
                }
                sb.append(w + "," + h + ";");
            }
    
            return sb.toString();
        }
    
        public void generate() {
            String[] vals = supportStr.split(";");
            for (String val : vals) {
                String[] wh = val.split(",");
                generateXmlFile(Integer.parseInt(wh[0]), Integer.parseInt(wh[1]));
            }
    
        }
    
        private void generateXmlFile(int w, int h) {
    
            StringBuffer sbForWidth = new StringBuffer();
            sbForWidth.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
            sbForWidth.append("<resources>");
            float cellw = w * 1.0f / baseW;
    
            System.out.println("width : " + w + "," + baseW + "," + cellw);
            for (int i = 1; i < baseW; i++) {
                sbForWidth.append(WTemplate.replace("{0}", i + "").replace("{1}",
                        change(cellw * i) + ""));
            }
            sbForWidth.append(WTemplate.replace("{0}", baseW + "").replace("{1}",
                    w + ""));
            sbForWidth.append("</resources>");
    
            StringBuffer sbForHeight = new StringBuffer();
            sbForHeight.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
            sbForHeight.append("<resources>");
            float cellh = h *1.0f/ baseH;
            System.out.println("height : "+ h + "," + baseH + "," + cellh);
            for (int i = 1; i < baseH; i++) {
                sbForHeight.append(HTemplate.replace("{0}", i + "").replace("{1}",
                        change(cellh * i) + ""));
            }
            sbForHeight.append(HTemplate.replace("{0}", baseH + "").replace("{1}",
                    h + ""));
            sbForHeight.append("</resources>");
    
            File fileDir = new File(dirStr + File.separator
                    + VALUE_TEMPLATE.replace("{0}", h + "")//
                            .replace("{1}", w + ""));
            fileDir.mkdir();
    
            File layxFile = new File(fileDir.getAbsolutePath(), "lay_x.xml");
            File layyFile = new File(fileDir.getAbsolutePath(), "lay_y.xml");
            try {
                PrintWriter pw = new PrintWriter(new FileOutputStream(layxFile));
                pw.print(sbForWidth.toString());
                pw.close();
                pw = new PrintWriter(new FileOutputStream(layyFile));
                pw.print(sbForHeight.toString());
                pw.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    
        public static float change(float a) {
            int temp = (int) (a * 100);
            return temp / 100f;
        }
    
        public static void main(String[] args) {
            int baseW = 320;
            int baseH = 400;
            String addition = "";
            try {
                if (args.length >= 3) {
                    baseW = Integer.parseInt(args[0]);
                    baseH = Integer.parseInt(args[1]);
                    addition = args[2];
                } else if (args.length >= 2) {
                    baseW = Integer.parseInt(args[0]);
                    baseH = Integer.parseInt(args[1]);
                } else if (args.length >= 1) {
                    addition = args[0];
                }
            } catch (NumberFormatException e) {
    
                System.err
                        .println("right input params : java -jar xxx.jar width height w,h_w,h_..._w,h;");
                e.printStackTrace();
                System.exit(-1);
            }
    
            new GenerateValueFiles(baseW, baseH, addition).generate();
        }
    
    }
    展开全文
  • 主要介绍了Adapter模式实战之重构鸿洋集团的Android圆形菜单建行的相关资料,需要的朋友可以参考下
  • 鸿洋 CSDN BLOG 文章汇总chm,更新至20171227 ANDROID 开发
  • WanAndroid 使用鸿洋大神的玩Android网站开放的api开发的android
  • 本教程从最基础的内容讲解,并且深入到了相关的各个细节,不论你是刚入门的菜鸟,还是有一定经验的工程师相信本系列文章都会对你有所...一、Android自定义View教程 https://www.gcssloop.com/category/customview...
  • Android 快速发布开源项目到jcenter

    万次阅读 多人点赞 2016-04-14 10:05:48
    转载请标明出处(请勿转载删除底部微博...大家在很多时候都希望让自己的开源项目可以更方便的让用户去使用,那么对于Android平台,一个很好的方式就是上传到jcenter,然后使用时通过添加compile引用即可。对于上传到jce
  • Android中多级树形列表

    千次阅读 2018-04-07 16:15:02
    在一次开发中,碰到了多级树形列表的问题,不是我们平时使用的ExpandListView这种只有子父类两级的列表,而是层级更深。 推荐几个可以参考的博客: 1、鸿神的ListView实现多级树形列表 2、一个兄弟在鸿神的基础上...
  • 连接地址:直接大牛的博客
  • 今天看了鸿洋_的“Android 自定义View (四) 视频音量调控”的自定义View,博客的具体地址:http://blog.csdn.net/lmj623565791/article/details/24529807#reply 刚开始自己对内切正方形的具体顶部距离的算法不是很...
  • 一款汇总了郭霖,鸿洋,以及自己平时收集的自定义控件的集合库。主旨帮助大家学习自定义控件中的一些技巧,分析问题解决问题的一种思路。
  • AutoLayout——Android屏幕自动适配

    万次阅读 多人点赞 2016-06-23 13:45:51
    不久前看了张鸿洋大神的《Android AutoLayout全新的适配方式 堪称适配终结者》,觉得不错。 拿来用了以后,发现有些问题。 自己觉得可以写一个类似的,于是兴趣大发,动手写出了自己的AutoLayout,感觉更胜一筹...
  • 快速实现Android多级树形列表,这个库是在鸿洋多级树形列表demo中修改而来。解决的问题:支持ID为int类型和String类型。支持多级复选框选中,使用只需一行代码。支持动态更新数据并保持原有展开/关闭状态。支持...
  • 使用的是鸿洋大神的菜单控件,在基本上添加旋转与自转。自定义菜单数量,距离中心图标距离等,可直接下载导入项目。
  • 鸿洋大佬力推,Android面试真相,

    千次阅读 2021-05-17 20:56:50
    鸿洋注:这里的反客为主,千万不要没事就反问面试官,那你给我讲怎么做。 在自我介绍中,一定要自信,不能上来就给面试官一种萎靡的感觉,可以简要的概括下你的工作经历,特别突出的亮点(意思就是让面试官重点关注...
  • 本项目使用鸿洋 recyclerview的万能适配器,包含三种item类型,简化了recyclerview的代码
  • 主要为大家详细介绍了Android多级树形列表控件的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Todo客户端,其中部分写法借鉴wanandroid客户端Kotlin版本,通过借鉴这个项目,又学会了一些Kotlin函数。
  • 根据自己的理解来重新认识Application. application是Android框架中的一个系统组件,与service类似,当Android系统启动时会自动创建application对象,用于存储应用程序的一些数据,通常我们不需要自己创建,系统会帮
  • android 换肤 eclipse 版本,来自鸿洋的换肤方法,改换成 eclipse 版本 [注意:本资源来自网络,如有侵权,请联系我删除,谢谢。]
  • Adapter模式实战-重构鸿洋Android建行圆形菜单

    万次阅读 多人点赞 2016-03-09 16:58:19
    ,感谢鸿洋的分享!!! 记得那是2014年的第一场雪,比以往时候来得稍晚一些。小民的同事洋叔是一位资深的研发人员,擅长写UI特效,在开发领域知名度颇高。最近洋叔刚发布了一个效果不错的圆形菜单,这个菜单的每个...
  • Android 高仿 QQ5.0 侧滑菜单效果 自定义控件来袭【学习鸿洋_视频博客笔记总结】
  • Android MVP模式

    千次阅读 2016-08-19 11:51:35
    什么是MVP模式MVP跟MVC的区别MVP模式在Android里的应用什么是MVP模式 M : Model  V : View  P : Presenter  MVP把Activity中的UI逻辑抽象成View接口,把业务逻辑抽象成Presenter接口,Model类还是原来的Model...
  • Android面试题(含答案)

    千次阅读 2015-07-28 18:10:28
    Android面试题汇总
  • 于是,下载了鸿洋大神的换肤demo来研究。 先看效果图:(尊重鸿洋大神的代码,效果图上原创) 鸿洋大神的换肤有两种: 1,ChangeSkin;侵入式换肤 2,AndroidChangeSkin;tag换肤这两种我都分析过。各有各的...
  • 前言:首先感谢这两天大家的投票,SuperVideo将不再拉票,可以去魅族应用市场下载最新2.0版本私下体验。有想帮投的,上一篇文章中,有链接。尤其感谢鸿洋基友和明云基友,两位都有维护自...
  • 本文仿写自鸿洋的自定义View (一),尽管过去了将近快7年之久,我觉得依然有学习价值。 效果 自定义View分类 简单介绍一下自定义View分类: 组合控件,继承自已有的layout,比如LinearLayout,然后通过...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,641
精华内容 2,256
关键字:

鸿洋android