Android:屏幕适配(2),Google百分比布局的扩展

不改变原有库的用法
添加了PercentLinearLayout
支持宽度高度百分比设置值
支持margin百分比设置值
支持padding百分比设置值
支持minWidth , maxWidth , minHeight , maxHeight百分比设置值
支持TextView、Button、EditText的textSize
支持ScrollView内部为Linearlayout
支持任何View的尺寸参照屏幕的宽或者高

一 扩展的功能

对于官方库,做了如下的改变:

不改变原有库的用法
添加了PercentLinearLayout
支持百分比指定特定的参考值,比如宽度或者高度。

例如:

app:layout_heightPercent="50%w"
app:layout_marginPercent="15%w"
app:layout_marginBottomPercent="20%h"
支持通过app:layout_textSizePercent设置textView(button,editText)的textSize

例如:

 <TextView
      app:layout_textSizePercent="3%h"
 />
对于外层套ScrollView的问题,目前可以在PercentLinearLayout的外层使用ScrollView,不过对于宽度的百分比参考的就是android.R.id.content的高度(因为,无法参考父控件的高度,父控件的高度理论上依赖于子View高度,且模式为UNSPECIFIED)。

支持minWidth,maxWidth,minHeight,maxHeight的支持。

例如:

app:layout_maxWidthPercent
app:layout_maxHeightPercent
app:layout_minWidthPercent
app:layout_minWidthPercent
(注:用法和maxHeight等一致,如果使用:值会覆盖原本的maxHeight等属性)。

支持padding百分比设置值

例如:

app:layout_paddingBottomPercent="8%w"
app:layout_paddingLeftPercent="2%w"
app:layout_paddingRightPercent="4%w"
app:layout_paddingTopPercent="6%w"
支持任何尺寸参考屏幕的宽或者高
<ImageView
  //...
   app:layout_heightPercent="30%sh"
   app:layout_widthPercent="30%sh"/>

二 为什么要扩展这个库

首先我们回顾下百分比布局库的用法,提供了PercentRelativeLayout、PercentFrameLayout供大家在编写的时候,对于以下属性:

layout_widthPercent、layout_heightPercent、 layout_marginPercent、layout_marginLeftPercent、 layout_marginTopPercent、layout_marginRightPercent、 layout_marginBottomPercent、layout_marginStartPercent、layout_marginEndPercent。

可以使用百分比进行设置宽、高、边距,的确给我们在适配上提供了极大的便利,但是在使用过程中,觉得存在一些场景无法得到满足。什么场景呢?下面我举几个例子。

当使用图片时,无法设置宽高的比例

比如我们的图片宽高是200*100的,我们在使用过程中我们设置宽高为20%、10%,这样会造成图片的比例失调。为什么呢?因为20%参考的是屏幕的宽度,而10%参考的是屏幕的高度。

很难使用百分比定义一个正方形的控件

比如,我现在界面的右下角有一个FloatingActionButton,我希望其宽度和高度都为屏幕宽度的10%,很难做到。

一个控件的margin四个方向值一致

有些时候,我设置margin,我希望四边的边距一致的,但是如果目前设置5%,会造成,上下为高度的5%,左右边距为宽度的5%。

综合上述这些问题,可以发现目前的percent-support-lib并不能完全满足我们的需求,所以我们考虑对其进行扩展。说白了,我们就希望在布局的时候可以自己设定参考看度还是高度,比如上述2,我们对于宽高可以写成10%w,10%w。也就是在不改变原库的用法的前提下,添加一些额外的支持。

三.用法

dependencies {
    //...
    compile 'com.zhy:percent-support-extends:1.0.7'
}
不需要导入官方的percent-support-lib了。

对于的三个类分别为:

com.zhy.android.percent.support.PercentLinearLayout
com.zhy.android.percent.support.PercentRelativeLayout
com.zhy.android.percent.support.PercentFrameLayout

这里写图片描述

代码:

<?xml version="1.0" encoding="utf-8"?>


    <com.zhy.android.percent.support.PercentFrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <com.zhy.android.percent.support.PercentFrameLayout
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_gravity="center"
            android:background="#ff44aacc"
            app:layout_heightPercent="50%w"
            app:layout_widthPercent="50%w">

            <com.zhy.android.percent.support.PercentFrameLayout
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_gravity="center"
                android:background="#ffcc5ec7"
                app:layout_heightPercent="50%w"
                app:layout_widthPercent="50%w">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_gravity="center"
                    android:background="#ff7ecc16"
                    android:gravity="center"
                    android:text="margin 15% of w"
                    app:layout_marginPercent="15%w"
                    />

            </com.zhy.android.percent.support.PercentFrameLayout>

        </com.zhy.android.percent.support.PercentFrameLayout>

        <TextView android:layout_width="0dp"
                  android:layout_height="0dp"
                  android:layout_gravity="bottom|right"
                  android:background="#44ff0000"
                  android:gravity="center"
                  android:text="15%w,15%w"
                  app:layout_heightPercent="15%w"
                  app:layout_marginPercent="5%w"
                  app:layout_widthPercent="15%w"/>


    </com.zhy.android.percent.support.PercentFrameLayout>

感谢:
感谢作者-张鸿洋

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值