Android进阶系列之Percent Support Library使用详解

原创 2017年01月03日 18:05:16

总是在为屏幕适配而烦恼,蓝瘦香菇。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:百分比表示顶部的间隔
举一个简单例子:

<android.support.percent.PercentRelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.administrator.singleinstance.MainActivity">

    <TextView
        android:id="@+id/left"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_alignParentTop="true"
        android:background="@color/colorPrimaryDark"
        app:layout_heightPercent="30%"
        app:layout_widthPercent="70%"
        />
    <TextView
        android:layout_toRightOf="@+id/left"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_alignParentTop="true"
        android:background="@color/colorAccent"
        app:layout_heightPercent="30%"
        app:layout_widthPercent="30%"
        />
    <TextView
        android:layout_below="@+id/left"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="#000"
        app:layout_marginTopPercent="30%"
        app:layout_marginLeftPercent="25%"
        app:layout_heightPercent="70%"
        app:layout_widthPercent="50%"
        />

</android.support.percent.PercentRelativeLayout>


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

<TextView
        android:id="@+id/left"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_alignParentTop="true"
        android:background="@color/colorPrimaryDark"
        app:layout_heightPercent="30%"
        app:layout_aspectRatio="150%"
        />


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);
        }

    }

}
<com.example.administrator.singleinstance.PercentLinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.administrator.singleinstance.MainActivity">

    <TextView
        android:id="@+id/left"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@color/colorPrimaryDark"
        app:layout_heightPercent="30%"
        app:layout_aspectRatio="150%"
        />
    <TextView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@color/colorAccent"
        app:layout_heightPercent="30%"
        app:layout_widthPercent="30%"
        />

    <TextView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="#000"
        app:layout_marginTopPercent="10%"
        app:layout_marginLeftPercent="25%"
        app:layout_heightPercent="30%"
        app:layout_widthPercent="50%"
        android:id="@+id/textView" />

</com.example.administrator.singleinstance.PercentLinearLayout>


基本使用也就这么多了,给个git的项目地址:https://github.com/JulienGenoud/android-percent-support-lib-sample


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

http://www.open-open.com/lib/view/open1435563531716.html  国外博客

版权声明:【码字不易,转载请标明出处,http://blog.csdn.net/sw5131899的博客,欢迎转载】 举报

相关文章推荐

android-support-percent的学习使用笔记

在sdk/extras/android/support/percent目录下,有个jar包,仔细发现,这个jar包是支持Percent百分比布局的,所以特别学习了一下,虽然这个包出现了好久,这才注意到...

Android Studio com.android.support:percent 导入错误

看第一行代码(第二版的)书,讲了一个关于PercentFrameLayout和PercentRelativeLayout的部分,书上在build.gradle中导入了com.android.suppo...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Android Studio新建工程Gradle编译报错(com.android.support:appcompat-v7:16.+)

以前的Android开发都是在Eclipse中,其缺点是Eclipse的大而全,对Android来说不够专业,还需要加入插件才可以支持,运行速度慢,调试不方便。为此Google重新研发了针对Andro...

android-support-percentlayout支持库的使用

这个库听说是谷歌后来出的支持库,可以按比例来设置各组件的宽高,今天拿来试了试,一直出错。大概的意思是没有发现定义的资源、找不到什么R$style类,后来才发现,原来使用这个库根本不用导入jar包,只需...

Android 百分比布局库(percent-support-lib) 解析与扩展

Google终于开始支持百分比的方式布局了,瞬间脉动回来,啊咧咧。对于这种历史性的时刻,不出篇博客难以表达我内心的激动。,本文分为3个部分: PercentRelativeLayout、Percent...

Android Support库百分比布局 com.android.support:percent:22.2.0 附带Eclipse教程

先来一个demo的路径 https://github.com/JulienGenoud/android-percent-support-lib-sample 不过是android Studio的 ...

Android 增强版百分比布局库 为了适配而扩展

转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/46767825; 本文出自:【张鸿洋的博客】 一 概述 上周一...

build.gradle导入com.android.support:percent 的依赖错误

前面段时间系统出了问题,于是重装了系统,Android Studio昨天也搞好了,今天早上来重新搞Android项目要导入com.android.support:percent 依赖的时候,就报了下面...

历久而新,我的新书《第二行代码》已出版!

《第二行代码》中的内容我相信很多人都会非常感兴趣,因为里面确实加入了很多很新的知识。略粗概括一下的话,新增内容就包括有Android Studio、Gradle、Material Design、运行时...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)