Android提供了哪些布局管理器,Android开发七:布局管理器4(网格布局GridLayout,绝对布局AbsoluteLayout)...

Android开发7:布局管理器4(网格布局GridLayout,绝对布局AbsoluteLayout)

版本:Android4.3 API18  学习整理:liuxinming

GridLayout

概述

GridLayout即网格布局,它是Android4.0新增的布局管理器,因此需要在Android4.0之后的版本中才能使用该布局。

GridLayout的作用类似于HTML中的table标签,它把整个容器划分成rowsxcolumns个网格,每个网格可以放置一个组件。

初次之外,也可以设置一个组件横跨多少列、一个组件纵跨多少行。

GridLayout提供了setRowCount(int)和setColumnCount(int)方法来控制该网格的行数量和列数量

为了控制GridLayout布局容器中各子组件的布局分布,GridLayout提供了一个内部类:

GridLayout.layoutParams

XML属性及方法

XML属性

相关方法

说明

android:alignmentMode

setAlignmentMode(int)

设置该布局管理器采用的对齐模式

android:columnCount

setColumnCount(int)

设置该网格的列数量

android:columnOrderPreserved

setColumnOrderPreserved(boolean)

设置该网格容器是否保留列序号

android:rowCount

setRowCount(int)

设置该网格的行数量

android:rowOrderPreserved

setRowOrderPreserved(boolean)

设置该网格容器是否保留行序号

android:useDefaultMargins

setUseDefaultMargins(boolean)

设置该布局管理器是否使用默认的页边距

奉上实例:计算器界面

设计场景:将该界面分解成一个6 * 4的网格,其中第一个输入文本框横跨4列

通过java代码循环出16个按钮

xml布局代码

android:layout_width="match_parent"

android:layout_height="match_parent"

android:rowCount="6"

android:columnCount="4"

android:id="@+id/root"

>

android:id="@+id/text01"

android:layout_width="match_parent"

android:layout_columnSpan="4"

android:textSize="50sp"

android:layout_marginLeft="4dp"

android:layout_marginRight="4dp"

android:padding="5dp"

android:layout_gravity="right"

android:background="#eee"

android:textColor="#000"

android:text="0"

/>

java代码

package com.example.gridlayout;

import android.os.Bundle;

import android.app.Activity;

import android.util.Log;

import android.view.Gravity;

import android.view.Menu;

import android.widget.Button;

import android.widget.GridLayout;

public class MainActivity extends Activity {

private String tag = "GridLayoutActivity";

GridLayout gridLayout;

//定义16个按钮的文本

String[] chars = new String[]

{

"7","8","9","/",

"4","5","6","*",

"1","2","3","-",

".","0","=","+"

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//获取View对象

gridLayout = (GridLayout) findViewById(R.id.root);

for(int i = 0 ; i < chars.length ; i++)

{

Button bn = new Button(this);

bn.setText(chars[i]);

//设置该按钮的字号大小

bn.setTextSize(60);

bn.setWidth(115);

bn.setHeight(130);

//指定该组件所在的行

GridLayout.Spec rowSpec = GridLayout.spec(i / 4+2);

//指定该组件所在的列

GridLayout.Spec columnSpec = GridLayout.spec(i%4);

String msg ="rowSpec:"+(i / 4+2)+" - columnSpec:"+(i%4);

Log.d(tag, msg);

GridLayout.LayoutParams params = new GridLayout.LayoutParams(rowSpec,columnSpec);

//指定该组件占满容器

params.setGravity(Gravity.FILL);

gridLayout.addView(bn,params);

}

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

}

上面的案例打印了一个行号,列号日志,等会分析。先来看看效果吧

161845261.jpg

下面我们来看看打印出来的日志

用到的函数:

public static GridLayout.Spec spec (int start)

=======================API介绍

返回一个Spec,其中

start 开始索引

=======================日志

rowSpec 是行的开始索引

columnSpec 是列的开始索引

看到这里相信你已经明白下面日志了,行索引为2时,也就是第二行,列从0到3表示4列。

161845262.jpg

类概述知识点

对齐指定视图应放置在一个单元格组的某个位置以及尺寸大小。

GridLayout.LayoutParams类包含一个rowSpec和columnSpec,其中每个都包含对齐。整体单元格组由这两种沿每个轴单独对齐的方式指定。

GridLayout类定义使用最常见的对齐方式,在总体布局上,左,下,右,居中,基线,填充。

推荐一篇不错的关于GridLayout布局文章,有兴趣的可以看看http://tech.it168.com/a2011/1122/1277/000001277274.shtml

AbsoluteLayout

概述

AbsoluteLayout绝对布局,android不提供任何布局控制,需要开发通过X坐标、Y坐标来控制组件的位置。

当使用AbsoluteLayout作为布局容器时,布局容器不再管理子组件的位置、大小

PS:由于现在android版本各异,屏幕大小,分辨率变化万千,因此使用AbsoluteLayout需要谨慎使用。

使用AbsoluteLayout时,每个子组件都可以指定如下两个XML属性

XML属性

说明

android:layout_x

指定该子组件的X坐标

android:layout_y

指定该子组件的Y坐标

Android中一般支持如下常用的距离单位

1、px(像素):每个px对应屏幕上的一个点。

2、dip或dp(device independent pixels,设备独立像素):一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dip = 1px。但随着屏幕密度的改变,dip与px的换算会发生改变

3、sp(scaled pixels,比例像素):主要处理字体的大小,可以根据用户的字体大小首选项进行缩放。

4、in(英寸):标准长度单位。

5、mm(毫米):标准长度单位

6、pt(磅):标准长度单位,1/72 英寸。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值