AndroidScreenAdaptation

Introduction: A light and easy-to-use Android development screen adaptation tool library(一个轻量好用的安卓开发屏幕适配工具库)
More: Author   ReportBugs   
Tags:

本库特点

完全不用改变自己的布局编写习惯,你原先是怎么写布局,就怎么写布局.不用去继承适配类,不用在最外层包裹适配布局,不用新建茫茫多的分辨率适配文件夹,不要求强制使用 px 为单位,支持代码动态添加 view 适配,可以实时预览布局,满足旋转和分屏适配,全面屏或带虚拟按键手机适配也没问题.

效果展示

快速开始

  1. 添加依赖

    implementation 'me.yatoooon:screenadaptation:1.1.1'

  2. 初始化工具类

    (1.)创建自己的 application 继承 Application ``` public class App extends Application { @Override public void onCreate() {

     super.onCreate();
     ScreenAdapterTools.init(this);
    

    }

//旋转适配,如果应用屏幕固定了某个方向不旋转的话(比如 qq 和微信),下面可不写. @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); ScreenAdapterTools.getInstance().reset(this); } }

      (2.)在 AndroidManifest.xml 文件中声明使用你自己创建的 application 并且添加 meta-data 数据,例子上标明了这些数据的代表的意义

//设计图的宽,单位是像素,推荐用 markman 测量,量出来如果是 750px 那么请尽量去找 ui 设计师要一份 android 的设计图. //设计图对应的标准 dpi,根据下面的那张图找到对应的 dpi,比如 1080 就对应 480dpi,如果拿到的是其他宽度的设计图,那么选择一个相近的 dpi 就好了 //全局字体的大小倍数,有时候老板会觉得你的所有的字小了或者大了,你总不能一个一个去改吧 //你的布局里面用的是 px 这就写 px,你的布局里面用的是 dp 这就写 dp,要统一,不要一会儿 px 一会儿 dp,字体也用 px 或者 dp,不要用 sp,微信 qq 用的肯定不是 sp.

```
宽             240     320     480     720     1080     1440  
DPI 等级            LDPI    MDPI    HDPI    XHDPI    XXHDPI    XXXHDPI
DPI 数值            120    160    240    320    480    640
  1. 开始使用

    (1.)在 Activity 中,找到 setcontentview(R.layout.xxxxxx)

    public class MainActivity extends AppCompatActivity {
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main_dp);
         //ScreenAdapterTools.getInstance().reset(this);//如果希望 android7.0 分屏也适配的话,加上这句
         //在 setContentView();后面加上适配语句
         ScreenAdapterTools.getInstance().loadView(getWindow().getDecorView());
    
     }
    }
    

    (2.)在 Fragment 或 recyclerview,listview 或 gridview,viewpager,自定义 view 等等等,只要能找到布局填充器(自定义 view 完全是代码绘制的没有用布局填充器怎么办?往下看)

public class TestFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.test_px, container, false);
        //拿到布局填充器返回的 view 后
        ScreenAdapterTools.getInstance().loadView(view);
        return view;
    }
}  
注: 1.自定义 view 的话,在  ScreenAdapterTools.getInstance().loadView(view);   外面包裹一层判断如下,不然在使用自定义 view 编写布局文件时预览 xml 会有问题!但不影响真机运行效果.
        if (!isInEditMode()) {
            ScreenAdapterTools.getInstance().loadView(view);
        }    
    2.完全代码绘制的自定义 view 怎么办?   比如说我绘制了个半径为 100dp 的圆,在代码里找到获取半径属性值 circleRadius 的地方  
       circleRadius = ScreenAdapterTools.getInstance().loadCustomAttrValue(circleRadius);
  (3.)现在打开你的布局文件,并且打开预览,点击预览上部的小手机图标选择和你设计图匹配的模拟器,然后就可以按照设计图测量并编写布局文件,测量和编写的单位用 px 还是 dp 取决于你清单文件中的 meta_data 中 unit 填写的值,暂时只支持宽 高 padding layout_margin 字体大小 这几个属性(如果有 minmaxWidthHeight 这种属性值,适配时...loadView(...view,new CustomConversion()),如果有其他需要的属性值,请自行继承 IConversion 和 AbsLoadViewHelper 编写),布局文件完成后,你看到的预览是什么样,各种真机运行出来就是什么样.

原理

  那些长篇大论的文章我也不想提,想必读者已经在别处看疯了,知道几个最简单的概念用起来就可以了  
     1. px 是分辨率的单位 比如现在主流手机分辨率 1080*1920. 2. dp 是安卓开发专有的单位 在 不同的手机下 1dp = 不同的 px.  
     3. sp 是字体大小(前面清单文件中要求字体也用 dp 或者 px),sp 随系统字体大小变化而变化,但据我观察,像微信 qq 这些 app 的字体是不随系统显示字体大小变化的.
     ### 本库是按照设计图的宽度的值(单位 px)和对应标准 dpi 来适配的(手机实际宽度相对于设计图增加或减少,高度同比例(这的比例是宽度增加或减少的比例)增加或减少),所有的布局控件都按这个比例(手机实际宽度/设计图宽度)来适配,在不同的分辨率,不同 ppi(手机屏幕密度,又称为 dpi),不同最小宽度(有的人喜欢去调开发者选项下面的最小宽度,主流手机默认为 360dp)的手机下都做到了适配.

联系我

  • 最好直接提 issue: qq 和 email 有时候收不到
  • Email: qazasdeszplm@126.com
  • qq: 3529161483

    6 月 6 日看到了头条技术团队的适配方案,他们是真的机智,虽然文章中有一些表述不太正确,链接:https://mp.weixin.qq.com/s/d9QCoBP6kV9VSWvVldVVwA ,原理差不多,只不过头条在源头修改了强制修改了 density 进行适配,这种写法是真他娘的省事,我当时怎么就没有想到呢??? 不过如果你有直接写 px 的习惯(UI 大妹子就只给标注 px!),那就用我的框架吧.
    6 月 25 日有人和我说头条这个方案在 8.0 以上机型无效,我也没有测,大家自己斟酌.
    6 月 28 日有人和我说 8.0 也是可行的,修改 activity 的 density 而不是 application 的 density 就可以。 9 月 05 日推荐使用 jessyan 的 androidautosize,并且推荐开发框架也用他的.

    版权

     Copyright 2018 yatoooon
    
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
    
         http://www.apache.org/licenses/LICENSE-2.0
    
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
    
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools