Skip to content

Latest commit

 

History

History
159 lines (125 loc) · 4.98 KB

0010-support-percent.asc

File metadata and controls

159 lines (125 loc) · 4.98 KB

Android Support Percent库介绍

Percent库的设计目标是支持基于百分比的View大小设置。

目前,Percent库仅支持在定制的ViewGroup中设置子View的大小为ViewGroup大小的一个百分比。 此外,子View的宽高也可以设定为一个比例关系。


文章更新历史:

  • 2015/11/27 文章发布


1. 引入Percent库

直接修改build.gradle配置文件,添加该库的引用。例如:

dependencies {
    compile 'com.android.support:percent:23.1.1'
}

也可以通过Android Studio的Project Structure (File → Project Structure,Dependencies)添加引用。

2. Percent库介绍

2.1. 示例代码及效果

先看一段示例代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.percent.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">

    <TextView
        android:id="@+id/hello"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#33cc33"
        app:layout_heightPercent="30%"
        android:text="Hello World!" />

    <android.support.percent.PercentRelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_heightPercent="70%"
        android:layout_gravity="bottom">
        <ImageView
            android:id="@+id/camera1"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="#ee3333"
            app:layout_widthPercent="10%"
            app:layout_aspectRatio="100%"
            android:src="@drawable/ic_menu_camera" />
        <ImageView
            android:id="@+id/camera2"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="#ee3333"
            android:layout_toRightOf="@id/camera1"
            android:layout_toEndOf="@id/camera1"
            app:layout_widthPercent="10%"
            app:layout_aspectRatio="50%"
            android:src="@drawable/ic_menu_camera" />
        <ImageView
            android:id="@+id/camera3"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="#ee3333"
            android:layout_toRightOf="@id/camera2"
            android:layout_toEndOf="@id/camera2"
            app:layout_widthPercent="10%"
            app:layout_aspectRatio="200%"
            android:src="@drawable/ic_menu_camera" />
        <ImageView
            android:id="@+id/camera4"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="#ee3333"
            android:layout_toRightOf="@id/camera3"
            android:layout_toEndOf="@id/camera3"
            app:layout_widthPercent="20%"
            app:layout_aspectRatio="100%"
            android:src="@drawable/ic_menu_camera" />
        <ImageView
            android:id="@+id/camera5"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="#ee3333"
            android:layout_toRightOf="@id/camera4"
            android:layout_toEndOf="@id/camera4"
            app:layout_widthPercent="30%"
            app:layout_heightPercent="50%"
            android:src="@drawable/ic_menu_camera" />
    </android.support.percent.PercentRelativeLayout>

</android.support.percent.PercentFrameLayout>

运行截图如下:

screenshot 20151127 support percent

2.2. PercentFrameLayout 和 PercentRelativeLayout

分别基于FrameLayout和RelativeLayout的Percent版本,支持子View设置width、height 和margin的百分比大小,也支持子View的长宽比设置。

如果设置了width和height的百分比大小,还可以设置“android:layout_width”和 “android:layout_height”的属性值为“wrap_content”。 此时,如果按百分比大小计算出来的子View大小不能够容纳子View的内容, 那么此时子View会放弃百分比大小,而采用“wrap_content”大小。

2.3. PercentLayoutHelper

如果需要在自己的ViewGroup中也支持基于百分比的大小设置, 那么可以借助PercentLayoutHelper来实现。

具体用法,请参考PercentLayoutHelper文档, 或者参考PercentFrameLayout和PercentRelativeLayout的实现代码。