前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >鸿洋AutoLayout代码分析(一):原因和使用

鸿洋AutoLayout代码分析(一):原因和使用

作者头像
dodo_lihao
发布2018-09-12 11:01:55
7320
发布2018-09-12 11:01:55
举报
文章被收录于专栏:懒人开发懒人开发

简单描述

android的适配比较麻烦,通常简单的适配有

  • 图片适配 不同像素密度屏幕,加载不同路径,相同名称的图片
  • dimens适配 不同像素密度屏幕,加载不同的宽高配置
  • layout布局配置 不同像素密度屏幕,加载不同的界面
  • java代码配置(很少整体使用,一般是局部的一个组件) 通过java代码来获取当前手机的宽高像素,按比例分配对应宽高

代码适配,虽然第一次写比较麻烦, 但是之后就会很省事情 而其他的,虽然不麻烦,但是改动起来会很头痛,各种数据


引用说明

这里 鸿洋大神也有说明,也有对应的自动写value相关dimen的程序 (如果大家自己写,应该也可以实现,但是项目周期就会延长,自己造轮子还是复用别人的轮子) http://blog.csdn.net/lmj623565791/article/details/45460089

这里,介绍也是 鸿洋大神 的自动适配Module,导入Module或者直接配置gradle就可以使用 具体使用,可以见 对应github的ReadMe https://github.com/hongyangAndroid/AndroidAutoLayout


使用描述
  • 第一步,配置 AndroidManifest 中注明你的设计稿的尺寸
代码语言:javascript
复制
<meta-data android:name="design_width" android:value="768"></meta-data>
<meta-data android:name="design_height" android:value="1280"></meta-data>

我们可以猜测,程序中会去获得对应的值,去做其他尺寸的适配

  • 第二步,让你的 Activity 继承自 AutoLayoutActivity,或者
代码语言:javascript
复制
LinearLayout -> AutoLinearLayout
RelativeLayout -> AutoRelativeLayout
FrameLayout -> AutoFrameLayout

这里我们可以理解,里面应该有自己的实现

  • 支持的属性
代码语言:javascript
复制
layout_width
layout_height
layout_margin(left,top,right,bottom)
pading(left,top,right,bottom)
textSize
maxWidth, minWidth, maxHeight, minHeight
  • 第三步,继承Application,
代码语言:javascript
复制
public class UseDeviceSizeApplication extends Application
{
    @Override
    public void onCreate()
    {
        super.onCreate();
        AutoLayoutConifg.getInstance().useDeviceSize();
    }
}

Application,我们通常会在第三方init一些值 或者程序初始化或者crash等,统一做的操作 当然也可以写一些公用的常量和方法 (具体自己看Application的定义) 大体可以明白,这里用于一些初始化操作

  • 扩展,其他继承系统的FrameLayout、LinearLayout、RelativeLayout的控件,比如CardView 自己可以写对应的代码
代码语言:javascript
复制
public class AutoCardView extends CardView
{
    private final AutoLayoutHelper mHelper = new AutoLayoutHelper(this);

    public AutoCardView(Context context)
    {
        super(context);
    }

    public AutoCardView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public AutoCardView(Context context, AttributeSet attrs, int defStyleAttr)
    {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public AutoFrameLayout.LayoutParams generateLayoutParams(AttributeSet attrs)
    {
        return new AutoFrameLayout.LayoutParams(getContext(), attrs);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        if (!isInEditMode())
        {
            mHelper.adjustChildren();
        }
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.09.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简单描述
  • 引用说明
  • 使用描述
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档