Android屏幕适配框架-(今日头条终极适配方案)
在Android开发中,因为碎片化的问题,屏幕适配是一个非常头痛的问题,因而为了去进行屏幕适配,作为程序员,是呕心沥血,历经磨难,哈哈
我们之前做屏幕适配一般都会用到一下两种方式:
-
第一种就是宽高限定符适配,什么是宽高限定符适配呢
├── src/main
│ ├── res
│ ├── ├──values
│ ├── ├──values-800x480
│ ├── ├──values-860x540
│ ├── ├──values-1024x600
│ ├── ├──values-1024x768
│ ├── ├──...
│ ├── ├──values-2560x1440 -
就是这种,在资源文件下生成不同分辨率的资源文件,然后在布局文件中引用对应的 dimens,大家一定还有印象
-
第二种就是 鸿神 的AndroidAutoLayout
这两种方案都已经逐渐退出了历史的舞台,为什么想必大家都知道,不知道的建议看看拉丁吴老师的文章,现在最主流的两种屏幕适配方案,今日头条适配方案和smallestWidth限定符适配方案,下面介绍一个框架,采用的是今日头条适配方案传送门
框架使用效果
使用方式
第一步: 在module的build.gradle文件下做如下依赖
implementation 'me.jessyan:autosize:0.9.5'
第二步: 在 AndroidManifest 中填写全局设计图尺寸 (单位 dp),如果使用副单位,则可以直接填写像素尺寸,不需要再将像素转化为 dp
<manifest>
<application>
<meta-data
android:name="design_width_in_dp"
android:value="360"/>
<meta-data
android:name="design_height_in_dp"
android:value="640"/>
</application>
</manifest>
经过上面两个步骤,框架就对你所有的页面进行适配了
当我们的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,我们可以对具体页面进行手动适配
Activity
-
当某个 Activity 的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,可以实现 CustomAdapt 接口扩展适配参数:
public class CustomAdaptActivity extends AppCompatActivity implements CustomAdapt {
@Override
public boolean isBaseOnWidth() {
return false;
}
@Override
public float getSizeInDp() {
return 667;
}
} -
当某个 Activity 想放弃适配,请实现 CancelAdapt 接口:
public class CancelAdaptActivity extends AppCompatActivity implements CancelAdapt {
}
Fragment
-
首先开启支持 Fragment 自定义参数的功能
AutoSizeConfig.getInstance().setCustomFragment(true);
-
当某个 Fragment 的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,可以实现 CustomAdapt 接口扩展适配参数:
public class CustomAdaptFragment extends Fragment implements CustomAdapt {
@Override
public boolean isBaseOnWidth() {
return false;
}
@Override
public float getSizeInDp() {
return 667;
}
} -
当某个 Fragment 想放弃适配,请实现 CancelAdapt 接口:
public class CancelAdaptFragment extends Fragment implements CancelAdapt {
}可以在 pt、in、mm 这三个冷门单位中,选择一个作为副单位,副单位是用于规避修改 DisplayMetrics#density 所造成的对于其他使用 dp 布局的系统控件或三方库控件的不良影响,使用副单位后可直接填写设计图上的像素尺寸,不需要再将像素转化为 dp
AutoSizeConfig.getInstance().getUnitsManager()
.setSupportDP(false)
.setSupportSP(false)
.setSupportSubunits(Subunits.MM);
ProGuard
-keep class me.jessyan.autosize.** { *; }
-keep interface me.jessyan.autosize.** { *; }
项目地址:
https://github.com/sweetying520/AndroidAutoSizeDemo
原文发布时间为:2018-09-26
本文作者:妖孽那里逃
本文来自云栖社区合作伙伴“终端研发部”,了解相关信息可以关注“终端研发部”
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android Studio 点击两次返回键,退出APP
该功能的实现没有特别复杂,主要在onKeyDown()事件中实现,直接上代码,如下: 1 //第一次点击事件发生的时间 2 private long mExitTime; 3 4 /** 5 * 点击两次返回退出app 6 */ 7 @Override 8 public boolean onKeyDown(int keyCode, KeyEvent event) { 9 if (keyCode == KeyEvent.KEYCODE_BACK) { 10 if ((System.currentTimeMillis() - mExitTime) > 2000) { 11 Object mHelperUtils; 12 Toast.makeText(this, "再按一次退出APP", Toast.LENGTH_SHORT).show(); 13 //System.currentTimeMillis()系统当前时间 14 mExitTime = System.currentTimeMillis(); 15 } else { 16 finish(); 17 } 18 return t...
- 下一篇
Android Studio 使用Intent实现页面的跳转(带参数)
不管是在APP,还是在网站中,页面之间的跳转都是很常见的,本文主要讲一下在APP中,如何通过Intent实现页面的跳转。 不带参数: 写在MainActivity页面的代码: 1 Intent intent = new Intent(); 2 intent.setClass(MainActivity.this, LoginActivity.class);//从MainActivity页面跳转至LoginActivity页面 3 this.startActivity(intent); 带参数: 写在SpendingActivity页面的代码: 1 Intent intent=new Intent(SpendingActivity.this,ExpenseProcesActivity.class);//从SpendingActivity页面跳转至ExpenseProcesActivity页面 2 intent.putExtra("strType", 0);//参数:name、value 3 SpendingActivity.this.startActivity(intent); 写在...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS6,CentOS7官方镜像安装Oracle11G
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS6,7,8上安装Nginx,支持https2.0的开启