AndroidGridLayout使⽤案例详解
⽬录
⼀、简介
⼆、常⽤属性介绍
三、平分问题
四、⼩⽶计算器效果
五、动态加载
⼀、简介
GridLayout是Android4.0引⼊的⽹格布局,使⽤它可以减少布局嵌套。也算是常⽤,但⼀直没仔细看过,今天研究⼀下⼆、常⽤属性介绍
GridLayout 使⽤属性
属性作⽤
android:columnCount最⼤列数
android:rowCount最⼤⾏数
android:orientation GridLayout中⼦元素的布局⽅向
android:alignmentMode alignBounds:对齐⼦视图边界 alignMargins :对齐⼦视距内容,默认值android:columnOrderPreserved使列边界显⽰的顺序和列索引的顺序相同,默认是true
android:rowOrderPreserved使⾏边界显⽰的顺序和⾏索引的顺序相同,默认是true
android:useDefaultMargins没有指定视图的布局参数时使⽤默认的边距,默认值是false
item属性
属性作⽤
android:layout_column指定该单元格在第⼏列显⽰
android:layout_row指定该单元格在第⼏⾏显⽰
android:layout_columnSpan指定该单元格占据的列数
android:layout_rowSpan指定该单元格占据的⾏数
android:layout_gravity指定该单元格在容器中的位置
android:layout_columnWeight(API21加⼊)列权重
android:layout_rowWeight(API21加⼊)⾏权重
android:layout_gravity作⽤
center不改变元素的⼤⼩,仅居中
center_horizontal不改变⼤⼩,⽔平居中
center_vertical不改变⼤⼩,垂直居中
top不改变⼤⼩,置于顶部
left不改变⼤⼩,置于左边
bottom不改变⼤⼩,置于底部
right不改变⼤⼩,置于右边
start不改变⼤⼩,根据系统语⾔,置于开始位置
end不改变⼤⼩,置于结尾
fill拉伸元素控件,填满其应该所占的格⼦
fill_vertical仅垂直⽅向上拉伸填充
fill_horizontal仅⽔平⽅向上拉伸填充
clip_vertical垂直⽅向上裁剪元素,仅当元素⼤⼩超过格⼦的空间时
clip_horizontal⽔平⽅向上裁剪元素,仅当元素⼤⼩超过格⼦的空间时
注意
使⽤layout_columnSpan 、layout_rowSpan时要加上layout_gravity属性,否则没有效果;另外item在边缘时宽⾼计算会出现错误,需要我们⼿动设置宽⾼,否则达不到想要的效果
三、平分问题
GridLayout在API21时引⼊了android:layout_columnWeight和android:layout_rowWeight来解决平分问题
那么在API21以前的,想要平分的话:引⽤兼容包
compile 'com.android.support:gridlayout-v7:25.+'
注意:
1. 使⽤该控件,命名空间使⽤app
2. 单独设置app:layout_columnWeight时,这⼀列的所有item都设置为这个属性,才能达到预期效果,否则这⼀列中设置了
该属性的item,都会被隐藏,显⽰不出来
3. 单独设置app:layout_rowWeight时,没有问题
四、⼩⽶计算器效果
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.GridLayout
xmlns:android="schemas.android/apk/res/android"
xmlns:app="schemas.android/apk/res-auto"
xmlns:tools="schemas.android/tools"
android:id="@+id/grid_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ece7e7"
app:alignmentMode="alignBounds"
app:columnCount="4"
app:orientation="horizontal"
app:rowCount="5"
app:useDefaultMargins="false"
tools:context="idlayoutdemo.MainActivity">
<!-- 如果不使⽤ app:layout_gravity="fill",
则实际下⾯这个textview的宽度只是wrap_content,
实现不了想要的right|bottom效果;
或者,
⽤app:layout_columnWeight="1",
效果等同,填充满
-->
<TextView
android:gravity="right|bottom"
android:text="0"
app:layout_columnSpan="4"
app:layout_rowWeight="3"
app:layout_columnWeight="1"/>
<TextView
android:layout_margin="1dp"
android:background="#ffffff"
android:gravity="center"
android:text="AC"
android:textColor="#f68904"margin属性怎么用
app:layout_columnWeight="1"
app:layout_rowWeight="1"/>
<TextView
android:layout_margin="1dp"
android:background="#ffffff"
android:gravity="center"
android:text="退格"
app:layout_columnWeight="1"
app:layout_rowWeight="1"/>
<TextView
android:layout_margin="1dp"
android:background="#ffffff"
android:gravity="center"
android:text="/"
app:layout_rowWeight="1"/> <TextView
android:layout_margin="1dp" android:background="#ffffff" android:gravity="center"
android:text="*"
app:layout_columnWeight="1" app:layout_rowWeight="1"/> <TextView
android:layout_margin="1dp" android:background="#ffffff" android:gravity="center"
android:text="7"
app:layout_columnWeight="1" app:layout_rowWeight="1"/> <TextView
android:layout_margin="1dp" android:background="#ffffff" android:gravity="center"
android:text="8"
app:layout_columnWeight="1" app:layout_rowWeight="1"/> <TextView
android:layout_margin="1dp" android:background="#ffffff" android:gravity="center"
android:text="9"
app:layout_columnWeight="1" app:layout_rowWeight="1"/> <TextView
android:layout_margin="1dp" android:background="#ffffff" android:gravity="center"
android:text="—"
app:layout_columnWeight="1" app:layout_rowWeight="1"/> <TextView
android:layout_margin="1dp" android:background="#ffffff" android:gravity="center"
android:text="4"
app:layout_columnWeight="1" app:layout_rowWeight="1"/> <TextView
android:layout_margin="1dp" android:background="#ffffff" android:gravity="center"
android:text="5"
app:layout_columnWeight="1" app:layout_rowWeight="1"/> <TextView
android:layout_margin="1dp" android:background="#ffffff" android:gravity="center"
android:text="6"
app:layout_columnWeight="1" app:layout_rowWeight="1"/> <TextView
android:layout_margin="1dp" android:background="#ffffff" android:gravity="center"
android:text="+"
app:layout_columnWeight="1" app:layout_rowWeight="1"/> <TextView
android:background="#ffffff"
android:gravity="center"
android:text="1"
app:layout_columnWeight="1"
app:layout_rowWeight="1"/>
<TextView
android:layout_margin="1dp"
android:background="#ffffff"
android:gravity="center"
android:text="2"
app:layout_columnWeight="1"
app:layout_rowWeight="1"/>
<TextView
android:layout_margin="1dp"
android:background="#ffffff"
android:gravity="center"
android:text="3"
app:layout_columnWeight="1"
app:layout_rowWeight="1"/>
<TextView
android:layout_margin="1dp"
android:background="#f68904"
android:gravity="center"
android:text="="
android:textColor="#ffffff"
app:layout_columnWeight="1"
app:layout_rowSpan="2"
app:layout_rowWeight="1"/>
<TextView
android:layout_margin="1dp"
android:background="#ffffff"
android:gravity="center"
android:text="%"
app:layout_columnWeight="1"
app:layout_rowWeight="1"/>
<TextView
android:layout_margin="1dp"
android:background="#ffffff"
android:gravity="center"
android:text="0"
app:layout_columnWeight="1"
app:layout_rowWeight="1"/>
<TextView
android:layout_margin="1dp"
android:background="#ffffff"
android:gravity="center"
android:text="."
app:layout_columnWeight="1"
app:layout_rowWeight="1"/>
</android.support.v7.widget.GridLayout>效果: 4.4.4模拟器
五、动态加载
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.GridLayout
xmlns:android="schemas.android/apk/res/android" xmlns:app="schemas.android/apk/res-auto"
xmlns:tools="schemas.android/tools"
android:id="@+id/grid_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ece7e7"
app:orientation="horizontal"
app:useDefaultMargins="false"
app:alignmentMode="alignBounds"
tools:context="idlayoutdemo.MainActivity"> </android.support.v7.widget.GridLayout>
2.动态添加
package idlayoutdemo;
aphics.Color;
import android.os.Bundle;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论