博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android进阶系列之Percent Support Library使用详解
阅读量:4166 次
发布时间:2019-05-26

本文共 3157 字,大约阅读时间需要 10 分钟。

总是在为屏幕适配而烦恼,蓝瘦香菇。Google爸爸看着我们这么辛苦,终于在2015年8月推出了一个全新的百分比布局兼容函数库:Android Percent Library。当时我的心情啊,就像看见了千年难得一见的美女。

那么来看看都咋用吧。首先需要在Gradle里加入依赖。

compile 'com.android.support:percent:24.2.0'
看清楚自己的compileSdkVersion,我的版本是24。根据自己的编译sdk版本来修改compile对应的Support Library。

打开下载后的函数库,发现其中主要包含三个类。

PercentFrameLayout、PercentRelativeLayout、PercentLayoutHelper

大部分的百分比实现逻辑都在PercentLayoutHelper这个类中,首先我们需要知道,PercentFrameLayout、PercentRelativeLayout分贝继承于FrameLayout、RelativeLayout。原有的属性和方法都是可以使用的。同时PercentHelper还对其做了百分比布局的扩展,在xml文件中,增加了如下属性配置。

  • heightPercent :百分比表示高度
  • widthPercent :百分比表示宽度
  • marginBottomPercent :百分比表示底部的间隔
  • marginEndPercent:百分比表示距离最后一个View之间的间隔
  • marginLeftPercent:百分比表示左边的间隔
  • marginPercent :百分比表示View之间的间隔
  • marginRightPercent:百分比表示右边的间隔
  • marginStartPercent:百分比表示距离第一个View之间的间隔
  • marginTopPercent:百分比表示顶部的间隔
举一个简单例子:

这里TextView的height和width可以不指定,但是Android Studio会提示没有设置这两个值。所以可以设置为0dp。percent库新增一个比较特殊的属性,layout_aspectRatio;用于设置View的宽高比。

google给我们的库中常用的少了一个LinearLayout,那怎么办呢,就用PercentLayoutHelper重新定义一个PercentLinearLayout
public class PercentLinearLayout extends LinearLayout{    private PercentLayoutHelper mPercentLayoutHelper;    public PercentLinearLayout(Context context, AttributeSet attrs)    {        super(context, attrs);        mPercentLayoutHelper = new PercentLayoutHelper(this);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)    {        mPercentLayoutHelper.adjustChildren(widthMeasureSpec, heightMeasureSpec);        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        if (mPercentLayoutHelper.handleMeasuredStateTooSmall())        {            super.onMeasure(widthMeasureSpec, heightMeasureSpec);        }    }    @Override    protected void onLayout(boolean changed, int l, int t, int r, int b)    {        super.onLayout(changed, l, t, r, b);        mPercentLayoutHelper.restoreOriginalParams();    }    @Override    public LayoutParams generateLayoutParams(AttributeSet attrs)    {        return new LayoutParams(getContext(), attrs);    }    public static class LayoutParams extends LinearLayout.LayoutParams            implements PercentLayoutHelper.PercentLayoutParams    {        private PercentLayoutHelper.PercentLayoutInfo mPercentLayoutInfo;        public LayoutParams(Context c, AttributeSet attrs)        {            super(c, attrs);            mPercentLayoutInfo = PercentLayoutHelper.getPercentLayoutInfo(c, attrs);        }        @Override        public PercentLayoutHelper.PercentLayoutInfo getPercentLayoutInfo()        {            return mPercentLayoutInfo;        }        @Override        protected void setBaseAttributes(TypedArray a, int widthAttr, int heightAttr)        {            PercentLayoutHelper.fetchWidthAndHeight(this, a, widthAttr, heightAttr);        }        public LayoutParams(int width, int height) {            super(width, height);        }        public LayoutParams(ViewGroup.LayoutParams source) {            super(source);        }        public LayoutParams(MarginLayoutParams source) {            super(source);        }    }}
基本使用也就这么多了,给个git的项目地址:

参考:Android高级进阶 --作者:顾浩鑫

 国外博客

你可能感兴趣的文章
mysql 赋给用户权限 grant all privileges on
查看>>
读取文件的几种方法
查看>>
yast 创建本地数据源
查看>>
vim 编码方式(encoding、fileencoding、fileencodings、termencoding介绍)
查看>>
程序员的十层楼
查看>>
windows 下php支持curl
查看>>
获取文件夹文件(C++)
查看>>
判断文件夹是否存在
查看>>
快速的内存分配器
查看>>
java中super 的两种用法
查看>>
bdb及其在php下扩展的安装
查看>>
bdb及其在php下扩展的安装
查看>>
android 小问题
查看>>
BerkeleyDB安装及配置
查看>>
标准的Activity Actions
查看>>
关于Android requires .class compatibility set to 5.0. Please fix project properties.的错误
查看>>
JAVA中implements实现多接口
查看>>
android中导入低版本project可能会遇到的编译问题
查看>>
showDialog
查看>>
Flex 拖拽范例
查看>>