帧布局容器为每个加入其中的组件创建一个空白的区域(称为一帧),所有每个子组件占据一帧,这些帧都会根据gravity属性执行自动对齐。
FrameLayout的常用XML属性和相关方法
XML属性
相关方法
说 明
android:foreground
setForeground(Drawable)
设置该帧布局容器的前景图像
android:foregroundGravity
setForegroundGravity(int)
定义绘制前景图像的gravity属性
下面的布局界面定义使用FrameLayout布局,并向该布局容器中添加了7个TextView,这7个TextView的高度完全相同,而宽度逐渐减少——这保证最先添加的TextView不会被完全遮挡;而且设置了7个TextView的背景色渐变。
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:id="@+id/View01"
android:layout_width="210dp"
android:layout_height="200dp"
android:background="#ff0000"/>
android:id="@+id/View02"
android:layout_width="180dp"
android:layout_height="200dp"
android:background="#dd0000"/>
android:id="@+id/View03"
android:layout_width="150dp"
android:layout_height="200dp"
android:background="#bb0000"/>
android:id="@+id/View04"
android:layout_width="120dp"
android:layout_height="200dp"
android:background="#990000"/>
android:id="@+id/View05"
android:layout_width="90dp"
android:layout_height="200dp"
android:background="#770000"/>
android:id="@+id/View06"
android:layout_width="60dp"
android:layout_height="200dp"
android:background="#550000"/>
android:id="@+id/View07"
android:layout_width="30dp"
android:layout_height="200dp"
android:background="#330000"/>
效果如图:
final Handler handler = new Handler() {
@Override
public void handleMessage(@NonNull Message msg) {
if (msg.what == 0x1122) {
for (int i &#61; 0; i <7 - currentColor; i&#43;&#43;) {
views[i].setBackgroundResource(colors[i &#43; currentColor]);
}
for (int i &#61; 7 - currentColor, j &#61; 0; i <7; i&#43;&#43;, j&#43;&#43;) {
views[i].setBackgroundResource(colors[j]);
}
}
super.handleMessage(msg);
}
};
//定义一个线程周期性地改变currentColor变量值
new Timer().schedule(new TimerTask() {
&#64;Override
public void run() {
currentColor&#43;&#43;;
if (currentColor >&#61; 6) {
currentColor &#61; 0;
}
Message m &#61; new Message();
m.what &#61; 0x1122;
handler.sendMessage(m);
}
}, 0, 500);
}