郭霖博客学习

标题

郭霖 CSDN
小目标:每周3篇,18年看完104篇。

怎么才能知道自己手机屏幕的密度呢?你可以使用如下方法先获取到屏幕的dpi值:
float xdpi = getResources().getDisplayMetrics().xdpi;
float ydpi = getResources().getDisplayMetrics().ydpi;

标题

项目结构分析
dpi详解:
mipmap文件夹只是用来放置应用程序的icon的,仅此而已。那么在此之前,我们都是把应用程序的icon图标和普通的图片资源一起放到drawable文件夹下的。将icon放置在mipmap文件夹还可以让我们程序的launcher图标自动拥有跨设备密度展示的能力

当引用一张图片时,Android会先去本机对应的hdpi下去找,找到引用,不会缩放该图。如果没找到,会优先去高密度下去找,到最高密度下仍没有,就从最适合分辨率往低找。以xxhdpi举例:
drawable-xxhdpi -> drawable-xxxhdpi -> drawable-nodpi -> drawable-xhdpi -> drawable-hdpi -> drawable-mdpi -> drawable-ldpi。
最终,如果是从更高密度下引用来的图片,会进行缩小操作(直接加载会出现密度过高);从低密度下引用来的图片,会进行放大操作。drawable-nodpi文件夹,这个文件夹是一个密度无关的文件夹,放在这里的图片系统就不会对它进行自动缩放。至于具体的缩放数据:每一种密度的dpi范围都有一个最大值,这个最大值之间的比例就是图片会被系统自动放大的比例。(郭神测算,未有文档支持。大致是很精确的)

一张原图片被缩小了之后显示其实并没有什么副作用,但是一张原图片被放大了之后显示就意味着要占用更多的内存了。一个xxhdpi设备,从mdpi加载图片,会进行放大操作,放大就会占用更多内存。找到当前主流机型的分辨率,就是当前最佳的分辨率级别。

Getting Your Apps Ready for Nexus 6 and Nexus 9

交互式控件
AlertDialog,会打断用户当前的操作,谨慎一点好。尽量使用appcompat-v7库中也提供了一个AlertDialog类,获得6.0之前的较好体验。

Toast, 建议封装,避免长时间弹。复用一个Toast。传当前Activity的context会内存泄露,传Application的。

SnackBar,体验更好。国内很少用。传View时,传根View。

View rootView = ((ViewGroup) (activity.findViewById(android.R.id.content))).getChildAt(0);make的时候填这个view就可以了

适配

  1. 合理布局。多使用wrap、match,dp;
  2. 巧用RelativeLayout,ConstraintLayout;
  3. 使用布局限定符,配合布局别名结合多布局;
  4. 根据分辨率,使用多套图。
  5. 使用AutoLayout。

优化
1启动页优化
styles.xml中主题相关的代码

让程序在初始化的时候窗口是透明的,初始化结束后程序主界面才会显示出来,从而也就完全看不到白屏界面了。

记录

03

  • Android冷启动白屏解析,带你一步步分析和解决问题
  • Android通知栏微技巧,那些你所没关注过的小细节
  • Android drawable微技巧,你所不知道的drawable的那些细节
  • Android提醒微技巧,你真的了解Dialog、Toast和Snackbar吗?
  • Android官方提供的支持不同屏幕大小的全部方法

你可能感兴趣的:(Android基础)