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


简单描述

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 中注明你的设计稿的尺寸


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

  • 第二步,让你的 Activity 继承自 AutoLayoutActivity,或者
LinearLayout -> AutoLinearLayout
RelativeLayout -> AutoRelativeLayout
FrameLayout -> AutoFrameLayout

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

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

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

  • 扩展,其他继承系统的FrameLayout、LinearLayout、RelativeLayout的控件,比如CardView
    自己可以写对应的代码
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);
    }
}
  • 其他相关内容,见ReadMe文件
    再次贴一下 鸿洋大神的 github 项目地址:
    https://github.com/hongyangAndroid/AndroidAutoLayout

下一篇我们可以了解鸿洋AutoLayout代码分析(二):获取Manifest中的值

你可能感兴趣的:(鸿洋AutoLayout代码分析(一):原因和使用)