=====================================

这一次的内容比较多,下面是节选

====================================

使用Containers容器来进行布局

简单而言,我们使用各种layout布局类,来保存系统提供的小部件(Widget)。在前面我们已经介绍了,android中使用基于xml文件的布局,所以我们要了解,在android中,有哪些布局,以及如何使用xml来显示各种界面。

Android,虽然有LinearLayout(线性布局),也提供了其他的一些支持。我们接下来会先介绍Linearlayout。然后会介绍其他的:RelativeLayout(相对布局)和Tablelayout(表格布局),以及使用ScrollView(可滚动视图)

了解LinearLayout

可以看到,线性布局是继承自ViewGroup

我们可以先看下ViewGroup

因为我们的UI界面,通常不会只有一个view视图的,所以android提供了这个ViewGroup的抽象类,类似于之前看到的Radiogroup.

ViewGroup中定义了可以添加View的方法

你可以随意的向它的子类中添加各种视图,用于程序代码中动态生成界面。

特别注意的是下面这个方法:

void

addView(View child, ViewGroup.LayoutParams params)

Adds a child view with the specified layout parameters.

我们可以通过ViewGroup.LayoutParams这类,把一个View作为布局中的一个元素,动态添加到界面中去。

我们在后面还会遇到这些

刚才说了,LinearLayout是线性布局,也成为盒子(Box)模型:其中的小部件或者子容器(布局是可以嵌套的哦),都是按照线性(行,或者列)的方式一个挨着一个的排列的。类似于javaswing中的FlowLatout

概念和属性

要是用LinearLayout,你可能会遇到下面的几个需要设置的属性,以控制容器的内容:

分别是 the orientation(水平方向)the fill model (填充方式)the weight(重量)the gravity(排列方向),以及the padding(间距)、下面分别介绍

the orientation(水平方向)

the orientation(水平方向)表示布局中的小部件是按照行还是按照列排列。

添加android:orientation属性可以设置horizontal水平按行排列或者vertical垂直按列排列

Ps orientation的值可以在运行时通过调用LinearLayout类的setOrientation()方法来设置。以调整水平还是垂直排列。

Fill Model(填充模式)

一般来说小部件都需要设置宽度和高度。那么宽度和高度的值就称为填充.

我们可以通过

Android:layout_widthandroid:layout_height属性来设置。

我们一般可以通过如下三种方式来设置值

l 可以提供具体的尺寸(dimension),比如125px,表示125个像素

l 可以提供wrap_content ,表示这个小部件会填充它的自然(初始)空间大小,一般除非它很大,都会按照系统自带的属性来填充属于它本来自己的空间的。

l 可以使用fill_parent ,表示小部件会填充满从它的位置开始,到所在的容器剩余的位置,其他的在它之后的小部件就会被掩盖掉(忽视掉,屏幕中看不到后面的小部件了)

后面的两种填充模式是常用的。因为他们是独立于屏幕尺寸的,会自适应。根据不同的设备,会自己调整大小一遍适应设备。

Weight(比重)

但是,如果我们需要两个小部件来分配容器中剩余的空间,我们该怎么办呢?比如,有两个多行输入的文本区域,按照列的方式排列。我们希望两个把剩余的填充满(什么意思呢?如果按照之前的wrap_方式,只能填充小部件自己的尺寸,如果按照fill_方式,只会显示其中一个,除非按照第一种方式,但是这种方式不能保证手机设备的自适应),所以我们这个时候就会用到weight这个属性了

为了达到这种目的,我们可以添加 android:weight属性(不论是按照列还是行来排列,他们都是采用 fill的填充方式),这个weight属性表示这些小部件所占据的剩余空间的比例。

如果,你设置了这两个小部件的 weight的值都一样,那么他们俩就会占据剩下空间的1/2(此时, androidweight都可以设置为1,表示1:1),如果一个设置1,另一个设置 2,那么前面一个就占有1/3,后一个占有2/3

Gravity(对齐方向)

默认情况下,所有的小部件都是左对齐 left)和置顶(Top)的。如果你希望按照自己的方式来对齐的话,可以设置一些特殊的值。

我们可以通过属性

Android:layout_gravity 或者调用方法 setGravity()来设置。

一般对应的值有

Left,center_horizontal,center_vertical right,等。。

Padding(间距)

默认情况下,小部件之间都是紧紧挨着的。如果你希望部件之间有些间距,那么可以通过设置padding来达到目的。

使用 android:padding 或者 setpadding()

我们直接通过下面的图来看就很容易明白这个属性的意思(其实,学习了html的同学,会很容易理解的)

Androidpadding 设置的是四个方向都一样的值

如果希望设置某一边的,可以选择

Android:paddingLeft ,android:paddingRight,android:paddingTop,android:paddingBottom

他们对应的值均是像素值,比如 5px

下面我们看一个例子吧:

首先是布局文件

布局文件显示

界面中有两组单选按钮,只要选中一个按钮,就会让界面布局发生变化

分别是:水平,垂直,左,中,右的效果

那么我们看下Activity代码

代码很简单,在onCreate()方法中,我们实例化了布局中的两个RadioGroup,并分别给他们注册了监听器。用于监听单选按钮的状态,即setOnCheckedChangeListener(this)..

因为我们定义的Activity这个类的时候,让它实现了OnCheckedChangeListener这个接口。那么这个Activity本身就是一个监听器啦~~~^_^

在回调方法onCheckedChange()中,我们看到了每个按钮组的变化。

更多相关文章

  1. Android设置透明、半透明等效果
  2. android自定义属性之format介绍
  3. Android(安卓)init.rc init.vendor.rc 介绍
  4. APP开发实战95-动态Vector基础
  5. ListPreference之entries和entryValues
  6. Android技术之ListView分割线显示和隐藏
  7. android init 进程分析 (4 属性服务)
  8. 转android四种动画
  9. Android文本输入框EditText属性和方法说明

随机推荐

  1. I盘格式化了的文件寻回方案.
  2. spring-data详解之spring-data-jpa:简单三
  3. 0318作业
  4. 【OCP最新题库解析(052)--题3】Which two
  5. 云管平台监控实践分享 | 周末送资料
  6. 什么是爬虫?Python爬虫工作需要掌握哪些技
  7. WebAssembly入门课
  8. Vue3.0高阶实战:开发高质量音乐Web app
  9. CSS进阶知识flex弹性布局容器与项目
  10. Vue3.0高阶实战:开发高质量音乐Web app