zoukankan      html  css  js  c++  java
  • Android分辨率适配心得

      关于Android分辨率适配,这个是Android开发很头疼的一个问题,也需要花费相当一部分开发时间处理的一个问题,往往一个界面怎么适配就得想半天,特别是新手,也经常有人问我是怎么适配分辨率的,我也不能几句话说清楚,自己也在研究中。

      其实,我觉得分辨率适配,不只是研发单方面的事情,与产品、UI设计师也有很大关联。首先产品必须了解一点Android布局以及分辨率适配的知识,设计的界面布局可以尽量简洁一点,效果图界面显示效果尽量稀疏一点,考虑到各个尺寸的手机每个界面的显示情况。其次,UI设计师设计时,也最好先定义一些级别的尺寸,例如一个应用的所有文字大小只有6个级别,所有界面的设计都尽量在这6个级别中选取,不要每个界面文字都不同,这样终端如果在配置文件里配置文字大小,就只需要6个配置了,另外,按钮背景等的切图,能不使用颜色渐变就不使用颜色渐变,这样终端可以使用.9.png的图片,既减小apk的尺寸,又节约应用内存。

      分辨率适配必须了解的知识:

      Supporting Multiple Screens :http://wiki.eoeandroid.com/Supporting_Multiple_Screens

      Providing Resources :http://wiki.eoeandroid.com/Providing_Resources

      

      我觉得分辨率适配的主要的几种方式:

      1、通过配置文件适配分辨率:

      控件尺寸,我觉得可以以屏幕宽度作为参考,一般手机屏幕比例差不多是320*480,如果一个控件的高度大约是屏幕总高度的0.1,就就差不多是宽度的0.1*1.5倍。

      例如,文字大小,可以以屏幕宽度做参考,定义几个级别的大小(sw为屏幕宽度):

      textsize1 = 23    (0.036*sw,列表3级)
      textsize2 = 32    (0.050*sw,列表2级)
      textsize3 = 37    (0.058*sw,列表1级)
      textsize4 = 45    (0.070*sw,标题)
      textsize5 = 56    (0.088*sw,特大)
      然后应用中尽量使用这几个文字大小。
      
      配置文件,可以定义以下几个配置文件:
      values-small(可以当做sw300计算)
      values-normal(可以当做sw320计算)
      values-large(可以当做sw480计算)
      values-xlarge(可以当做sw720计算)
      values-sw300dp(sw=300dp,以下相同)
      values-sw320dp
      values-sw340dp
      values-sw360dp
      values-sw400dp
      values-sw480dp
      values-sw520dp
      values-sw600dp
      values-sw720dp
      前4个是兼容api13以前的手机,api13以后就支持sw属性了,sw320dp附近的大小间隔可以精细点,因为大多数屏幕宽度都是320dp-360dp范围内,基本按照这个配置读取到的屏幕宽度和实际屏幕宽度相差很小了。
      定义这些比例,以及计算所有文件夹得配置大小,需要比较多的时间,但是只要配置完了,以后开发分辨率适配就会快速容易很多了。
     
      参考配置:
        <dimen name="screen_h_0_02">9.6dp</dimen>
        <dimen name="screen_h_0_04">19.2dp</dimen>
        <dimen name="screen_h_0_06">28.8dp</dimen>
        <dimen name="screen_h_0_08">38.4dp</dimen>
        <dimen name="screen_h_0_1">48dp</dimen> <!-- sw*0.15 -->
        <dimen name="screen_h_0_2">96dp</dimen>
        <dimen name="screen_h_0_3">144dp</dimen>
        <dimen name="screen_h_0_4">192dp</dimen>
        <dimen name="screen_h_0_5">240dp</dimen>
        <dimen name="screen_h_0_6">288dp</dimen>
         <dimen name="screen_h_0_7">336dp</dimen>
        <dimen name="screen_h_0_8">384dp</dimen>
    
        <dimen name="screen_w_0_1">32dp</dimen>
        <dimen name="screen_w_0_2">64dp</dimen>
        <dimen name="screen_w_0_3">96dp</dimen>
        <dimen name="screen_w_0_4">128dp</dimen>
        <dimen name="screen_w_0_5">160dp</dimen>
        <dimen name="screen_w_0_6">162dp</dimen>
        <dimen name="screen_w_0_7">224dp</dimen>
        <dimen name="screen_w_0_8">256dp</dimen>
        <dimen name="screen_w_0_9">288dp</dimen>
        <dimen name="screen_w">320dp</dimen>
    
       <!-- 文字 -->
        <!-- 0.030*sw,列表3级 -->
        <dimen name="com_textsize_small">9.6dp</dimen>
        <!-- 0.042*sw,列表2级 -->
        <dimen name="com_textsize_medium_small">13.4dp</dimen>
        <!-- 0.049*sw,列表1级 -->
        <dimen name="com_textsize_medium">15.7dp</dimen>
        <!-- 0.059*sw,标题 -->
        <dimen name="com_textsize_medium_large">18.9dp</dimen>
        <!-- 0.074*sw,特大 -->
        <dimen name="com_textsize_large">23.7dp</dimen>
    
    
        <!-- 按钮 -->
        <!-- 0.081*sw,纯文字 -->
        <dimen name="com_btn_h_medium_small">26dp</dimen>
        <!-- 0.100*sw,短按钮 -->
        <dimen name="com_btn_h_medium">32dp</dimen>
        <!-- 0.125*sw,长按钮 -->
        <dimen name="com_btn_h_medium_large">40dp</dimen>
        <!-- 0.144*sw,特大 -->
        <dimen name="com_btn_h_large">46dp</dimen>
    
       <!-- 间距 -->
        <!-- 0.025*sw -->
        <dimen name="com_padding_small">8dp</dimen>
        <!-- 0.031*sw,activity padding -->
        <dimen name="com_padding_medium_small">10dp</dimen>
        <!-- 0.050*sw,上边距 -->
        <dimen name="com_padding_medium">16dp</dimen>
        <!-- 0.069*sw,模块间距 -->
        <dimen name="com_padding_medium_large">22.1dp</dimen>
        <!-- 0.094*sw,特大 -->
        <dimen name="com_padding_large">30.1dp</dimen>

      ......
      2.代码控制
      级根据控件实际可申请到的空间大小,以及内容多少,进行代码控制大小。
      例如一个文字自适应的开源控件:https://github.com/grantland/android-autofittextview
      
      先分享这么多,以后发现有更好的适配方式,再分享。
      如果大家有更好的适配方法,欢迎讨论指教。
     
  • 相关阅读:
    RecyclerView+PageSnapHelper实现ViewPager效果+自动翻页
    webview设置不弹出权限请求弹窗
    Android加载webview网页卡顿卡死,webview开启debug模式
    jira部署
    机器人视觉抓取论文及代码资源
    Vision-based Robotic Grasping From Object Localization, Object Pose Estimation to Grasp Estimation for Parallel Grippers: A Review
    机械臂智能抓取涉及什么技术?
    http://wiki.ros.org/joint_trajectory_action
    Shuran Song
    Github上优秀的.NET Core项目
  • 原文地址:https://www.cnblogs.com/John-Chen/p/4216990.html
Copyright © 2011-2022 走看看