美文网首页第三方扩展Android开发Android知识
鸿洋AutoLayout代码分析(一):原因和使用

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

作者: dodo_lihao | 来源:发表于2016-09-10 10:40 被阅读1175次

    简单描述

    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 中注明你的设计稿的尺寸
    <meta-data android:name="design_width" android:value="768"></meta-data>
    <meta-data android:name="design_height" android:value="1280"></meta-data>
    

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

    • 第二步,让你的 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);
        }
    }
    

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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/ygjrettx.html