Android开发之百分比布局库

为了解决android手机适配问题,我们经常想如果可以按照百分比的方式进行界面布局,这样适配各种屏幕就简单多了吧!现在谷歌正式提供百分比布局支持库(android-support-percent-lib)。

这个库提供了:

两种布局供大家使用: PercentRelativeLayout、PercentFrameLayout,通过名字就可以看出,这是继承自FrameLayout和RelativeLayout两个容器类;

支持的属性有:

layout_widthPercent、layout_heightPercent、

layout_marginPercent、layout_marginLeftPercent、

layout_marginTopPercent、layout_marginRightPercent、

layout_marginBottomPercent、layout_marginStartPercent、layout_marginEndPercent。

可以看到支持宽高,以及margin。

也就是说,大家只要在开发过程中使用PercentRelativeLayout、PercentFrameLayout替换FrameLayout、RelativeLayout即可。

使用:

关于使用,其实及其简单,并且github上也有例子,android-percent-support-lib-sample。

使用Android studio在build.gradle添加以下信息就可以获取支持库,当然了,如果你没有下载到该支持库会提示你下载。

{5330C3E9-D43A-40E0-A247-83C217BE9A84}

PercentRelativeLayout使用小例子:

布局文件如下:

 <android.support.percent.PercentRelativeLayout

    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/row_one_item_one"

        android:layout_width="0dp"

        android:layout_height="0dp"

        android:layout_alignParentTop="true"

        android:background="#7700ff00"

        android:text="w:70%,h:20%"

        android:gravity="center"

        app:layout_heightPercent="20%"

        app:layout_widthPercent="70%"/>

 

    <TextView

        android:id="@+id/row_one_item_two"

        android:layout_width="0dp"

        android:layout_height="0dp"

        android:layout_toRightOf="@+id/row_one_item_one"

        android:background="#396190"

        android:text="w:30%,h:20%"

        app:layout_heightPercent="20%"

        android:gravity="center"

        app:layout_widthPercent="30%"/>

 

 

    <ImageView

        android:id="@+id/row_two_item_one"

        android:layout_width="match_parent"

        android:layout_height="0dp"

        android:scaleType="centerCrop"

        android:layout_below="@+id/row_one_item_one"

        android:background="#d89695"

        app:layout_heightPercent="70%"/>

 

    <TextView

        android:layout_width="0dp"

        android:layout_height="0dp"

        android:layout_below="@id/row_two_item_one"

        android:background="#770000ff"

        android:gravity="center"

        android:text="width:100%,height:10%"

        app:layout_heightPercent="10%"

        app:layout_widthPercent="100%"/>

 

</android.support.percent.PercentRelativeLayout

效果图如下

 

 

因为没有LinearLayout我们可以自己来自定义。刚好在网上看到有自定义好的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);

        }

 

    }

 

 

}

使用效果如下:

 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, 开发
, relativelayout
属性
android百分比布局、android百分比布局库、android 按百分比布局、android rtl布局 开发、android 平板开发布局,以便于您获取更多的相关知识。

时间: 2024-10-26 08:50:36

Android开发之百分比布局库的相关文章

可视化工具-Android开发一个本地题库,在录入题库信息时,怎么将图片信息导入到sqlite中。

问题描述 Android开发一个本地题库,在录入题库信息时,怎么将图片信息导入到sqlite中. 希望录入数据时通过可视化工具(sqlite expert)或者 excel 导入图片.. 实在是没什么思路....希望大家指点一下. 类似的效果 解决方案 小白不懂,还是要帮顶~~ 解决方案二: 虽然没真实往数据库里面存过图片,但还是不建议直接往数据库里面存图片,建议是把图片保存在网络上,这样,在启动APP或者安装之后,可以进行下载. 下载之后保存到本地,然后将路径存入本地数据库(同时将网络和本地路

Android开发中常用的库总结(持续更新)

这篇文章用来收集Android开发中常用的库,都是实际使用过的.持续更新... 原文地址:http://www.cnblogs.com/JohnTsai/p/4162390.html 1.消息提示的小红点 微信,微博消息提示的小红点. 开源库地址:https://github.com/stefanjauker/BadgeView 使用示例: BadgeView badge = new BadgeView(getActivity()); badge.setTargetView(myView); b

Android开发之线性布局

一.基础知识:    id="@+id/edtInput",ID 是连接UI 与代码的桥梁   layout_width="fill_parent" ,自动填充至屏幕宽度   layout_width="wrap_content" ,自动填充为控件大小     在LinearLayout 里面的控件,按照水平或者垂直排列:    orientation="horizontal" :水平排列:    orientation=&q

Android开发之相对布局

[plain] android:layout_above 将该控件的底部至于给定ID的控件之上  android:layout_below 将该控件的顶部至于给定ID的控件之下  android:layout_toLeftOf 将该控件的右边缘和给定ID的控件的左边缘对齐  android:layout_toRightOf 将该控件的左边缘和给定ID的控件的右边缘对齐    android:layout_alignBaseline 该控件的baseline和给定ID的控件的baseline对齐 

Android开发之表格布局

TableLayout置底,TableRow在TableLayout的上面,而Button.TextView等控件就在TableRow之上, 另外,TableLayout之上也可以单独放控件.TableLayout是一个使用复杂的布局,最简单的用法就仅 仅是拖拉控件做出个界面,但实际上,会经常在代码里使用TableLayout,例如做出表格的效果.   android:collapseColumns:以第0行为序,隐藏指定的列 android:shrinkColumns:以第0行为序,自动延伸指

Android开发之常用开源库直接拿来用

1.from  代码家 整理比较好的源码连接 *************************************************************************************************************************************************************************** http://blog.zhan-dui.com/?page_id=60 感谢 "代码家"整理 一.

Android开发-之五大布局详解_Android

在html中大家都知道布局是什么意思了,简单来说就是将页面划分模块,比如html中的div.table等.那么Android中也是这样的.Android五大布局让界面更加美化,开发起来也更加方便.当然布局方式不一样应用的地方也不一样,当然了有的布局方式也是可以相互转换和嵌套使用的.它们都各有各的优缺点,具体页面要怎么布局还是得看开发需求,但是用的最多的还是相对布局.线性布局以及相对布局和线性布局的嵌套使用.当然,我说的是安卓,并没有指定是安卓手机,比如平板.智能家居(电视...)很多都是Andr

Android开发中LinearLayout布局技巧及layout中drawable属性区别

先介绍drawable属性的区别,这个算是比较简单的,但是还是有一点点的小细节需要进行说明,drawable有五个文件夹,分别为hdpi,ldpi,mdpi,xdpi,xxdpi,这五个文件夹想必大家都知道,其实就是为了适应不同分辨率,由于手机分辨率的不同,因此我们的图片需要适应不同手机的分辨率...hdpi:480x800   mdpi:480x320   ldpi:320x240xdpi:1280x720 xxdpi 1920x1280其实这个数字并不是非常精确的,只是说明每一个阶段都有一个

Android开发-之五大布局详解

在html中大家都知道布局是什么意思了,简单来说就是将页面划分模块,比如html中的div.table等.那么Android中也是这样的.Android五大布局让界面更加美化,开发起来也更加方便.当然布局方式不一样应用的地方也不一样,当然了有的布局方式也是可以相互转换和嵌套使用的.它们都各有各的优缺点,具体页面要怎么布局还是得看开发需求,但是用的最多的还是相对布局.线性布局以及相对布局和线性布局的嵌套使用.当然,我说的是安卓,并没有指定是安卓手机,比如平板.智能家居(电视...)很多都是Andr