第1组UI组件:布局管理器
线性布局 LinearLayoutLinearLayout的常用XML属性及相关方法
LinearLayout子元素支持的常用XML属性及相关方法
温馨提示基本上很多布局管理器都提供了相应的LayoutParams内部类,该内部类用于控制他们的子元素支持指定android:layout_gravity属性,该属性设置该子元素在父容器中得对齐方式。与android:layout_gravity相似的属性还有android:gravity属性(一般容器才支持指定该属性),android:gravity属性用于控制它所包含子元素的对齐方式。 定义如下XML布局管理器<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity= "right|center_vertical">
<Button android:id="@+id/btn_one" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/bn1"/>
<Button android:id="@+id/btn_two" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/bn2"/>
<Button android:id="@+id/btn_three" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/bn3"/>
<Button android:id="@+id/btn_four" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/bn4"/>
<Button android:id="@+id/btn_five" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/bn5"/>
</LinearLayout>
表格布局 TableLayout每次向TableLayout中添加一个TableRow、该TableRow就是一个表格行,TableRow也是容器,因此它可以不断地添加其他组件,每添加一个子组件该表格就增加一列。 Shrinkable: 如果某个列被设为Shrinkable,那么该列的所有单元格的宽度可被收缩,以保证该表格能适应父容器的宽度。 TableLayout的常用XML属性及相关方法
实例:丰富的表格布局<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent">
<!-- 定义第一个表格布局,指定第2列允许收缩,第3列允许拉伸 -->
<TableLayout android:id="@+id/TableLayout01" android:layout_width="match_parent" android:layout_height="wrap_content" android:shrinkColumns="1" android:stretchColumns="2">
<!-- 直接添加按钮,它自己会占一行 -->
<Button android:id="@+id/ok1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="独自一行的按钮"/>
<!-- 添加一个表格行 -->
<TableRow>
<!-- 为该表格行添加三个按钮 -->
<Button android:id="@+id/ok2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="普通按钮"/>
<Button android:id="@+id/ok3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="收缩的按钮"/>
<Button android:id="@+id/ok4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="拉伸的按钮"/>
</TableRow>
</TableLayout>
<!-- 定义第2个表格布局 ,指定第2列隐藏-->
<TableLayout android:id="@+id/TableLayout02" android:layout_width="match_parent" android:layout_height="wrap_content" android:collapseColumns="1">
<!-- 直接添加按钮,它自己会占一行 -->
<Button android:id="@+id/ok5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="独自一行的按钮"/>
<!-- 添加一个表格行 -->
<TableRow>
<!-- 为该表格行添加三个按钮 -->
<Button android:id="@+id/ok6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="普通按钮1"/>
<Button android:id="@+id/ok7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="普通按钮2"/>
<Button android:id="@+id/ok8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="普通按钮3"/>
</TableRow>
</TableLayout>
<!-- 定义第3个表格布局,指定第2列和第3列可以被拉伸-->
<TableLayout android:id="@+id/TableLayout03" android:layout_width="match_parent" android:layout_height="wrap_content" android:stretchColumns="1,2">
<!-- 直接添加按钮,它自己会占一行 -->
<Button android:id="@+id/ok9" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="独自一行的按钮" />
<!--定义一个表格行-->
<TableRow>
<!-- 为该表格行添加三个按钮 -->
<Button android:id="@+id/ok10" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="普通按钮" />
<Button android:id="@+id/ok11" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="拉伸的按钮" />
<Button android:id="@+id/ok12" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="拉伸的按钮" />
</TableRow>
<!--定义一个表格行-->
<TableRow>
<!-- 为该表格行添加两个按钮 -->
<Button android:id="@+id/ok13" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="普通按钮" />
<Button android:id="@+id/ok14" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="拉伸的按钮" />
</TableRow>
</TableLayout>
</LinearLayout>
注意因为Android推荐将字符串集中放到XML文件中管理,但此处为了编程简单,所以直接在XML布局文件中给出里了按钮文本的字符串。 帧布局 FrameLayoutFrameLayout的常用XML属性及相关方法
温馨提示FrameLayout包含的子元素也受FrameLayout.LayoutParams控制,因此它所包含的子元素也可指定android:layout_gravity属性,该属性控制该子元素在FrameLayout中的对齐方式。 实例:霓虹灯效果程序清单:main.xml <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">
<!-- 依次定义6个TextView,先定义的TextView位于底层 后定义的TextView位于上层 -->
<TextView android:id="@+id/view01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:width="160pt" android:height="160pt" android:background="#f00"/>
<TextView android:id="@+id/view02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:width="140pt" android:height="140pt" android:background="#0f0"/>
<TextView android:id="@+id/view03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:width="120pt" android:height="120pt" android:background="#00f"/>
<TextView android:id="@+id/view04" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:width="100pt" android:height="100pt" android:background="#ff0"/>
<TextView android:id="@+id/view05" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:width="80pt" android:height="80pt" android:background="#f0f"/>
<TextView android:id="@+id/view06" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:width="60pt" android:height="60pt" android:background="#0ff"/>
</FrameLayout>
程序清单:MainActivity.java package org.yonga.ui;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends Activity {
private int currentColor = 0;
// 定义一个颜色数组
final int[] colors = new int[] {
R.color.color1,R.color.color2,R.color.color3,R.color.color4,R.color.color5,R.color.color6
};
final int[] names = new int[] {
R.id.view01,R.id.view02,R.id.view03,R.id.view04,R.id.view05,R.id.view06 };
TextView[] views = new TextView[names.length];
Handler handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
// 表明消息来自本程序所发送
if (msg.what == 0x123)
{
for (int i = 0; i < names.length; i++)
{
views[i].setBackgroundResource(colors[(i
+ currentColor) % names.length]);
}
currentColor++;
}
super.handleMessage(msg);
}
};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
for (int i = 0; i < names.length; i++)
{
views[i] = (TextView) findViewById(names[i]);
}
// 定义一个线程周期性地改变currentColor变量值
new Timer().schedule(new TimerTask()
{
@Override
public void run()
{
// 发送一条空消息通知系统改变6个TextView组件的背景色
handler.sendEmptyMessage(0x123);
}
},0,200);
}
}
注意因为Android的View和UI组件不是线程安全的,所以Android不允许开发者启动线程访问用户界面的UI组件。因此程序中额外定义了一个Handler来处理TextView背景色的更新。 相对布局 RelativeLayoutRelativeLayout的常用XML属性及相关方法
RelativeLayout.LayoutParams里只能设为boolean值的属性
RelativeLayout.LayoutParams里只能设为设为其他UI组件ID的属性
除此之外,RelativeLayout.LayoutParams还继承了android.view.ViewGroup.MarginLayoutParams,因此RelativeLayout布局容器中每个子组件也可以指定android.view.ViewGroup.MarginLayoutParams所支持的各XML属性。 实例:梅花布局效果<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">
<!-- 定义该组件位于父容器中间 -->
<TextView android:id="@+id/view01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/leaf" android:layout_centerInParent="true"/>
<!-- 定义该组件位于view01组件的上方 -->
<TextView android:id="@+id/view02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/leaf" android:layout_above="@id/view01" android:layout_alignLeft="@id/view01"/>
<!-- 定义该组件位于view01组件的下方 -->
<TextView android:id="@+id/view03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/leaf" android:layout_below="@id/view01" android:layout_alignLeft="@id/view01"/>
<!-- 定义该组件位于view01组件的左边 -->
<TextView android:id="@+id/view04" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/leaf" android:layout_toLeftOf="@id/view01" android:layout_alignTop="@id/view01"/>
<!-- 定义该组件位于view01组件的右边 -->
<TextView android:id="@+id/view05" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/leaf" android:layout_toRightOf="@id/view01" android:layout_alignTop="@id/view01"/>
</RelativeLayout>
网格布局 GridLayoutGridLayout提供了setRowCount(int)和setColumnCount(int)方法来控制该网格的行数量和列数量。 GridLayout的XML属性及相关方法
GridLayout.LayoutParams的XML属性及相关方法
实例:计算器界面1.在布局管理器中定义一个GridLayout,并在该GridLayout中依次定义文本框、按钮各横跨4列。 程序清单:main.xml <?xml version="1.0" encoding="utf-8" ?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:rowCount="6" android:columnCount="4" android:id="@+id/root">
<!-- 定义一个横跨4列的文本框, 并设置该文本框的前景色、背景色等属性 -->
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_columnSpan="4" android:textSize="50sp" android:layout_marginLeft="2pt" android:layout_marginRight="2pt" android:padding="3pt" android:layout_gravity="right" android:background="#eee" android:textColor="#000" android:text="0"/>
<!-- 定义一个横跨4列的按钮 -->
<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_columnSpan="4" android:text="清除"/>
</GridLayout>
程序清单:MainActivity.java package org.yonga.ui;
import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.GridLayout;
public class MainActivity extends Activity {
GridLayout gridLayout;
// 定义16个按钮的文本
String[] chars = new String[]
{
"7","8","9","÷","4","5","6","×","1","2","3","-",".","0","=","+"
};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
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(40);
// 设置按钮四周的空白区域
bn.setPadding(5,35,5,35);
// 指定该组件所在的行
GridLayout.Spec rowSpec = GridLayout.spec(i / 4 + 2);
// 指定该组件所在的列
GridLayout.Spec columnSpec = GridLayout.spec(i % 4);
GridLayout.LayoutParams params = new GridLayout.LayoutParams(
rowSpec,columnSpec);
// 指定该组件占满父容器
params.setGravity(Gravity.FILL);
gridLayout.addView(bn,params);
}
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |