2014-2-1android布局管理器2

1.    帧布局FrameLayout

帧布局容器为每个加入其中的组件创建一个空白的区域(称为一帧),每个子组件占据一帧。

实例:利用帧布局制作霓虹灯效果

    Xml程序清单

<?xmlversion="1.0"encoding="utf-8"?>

<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

<!--依次定义6TextView,先定义的TextView位于低层

      后定义的TextView位于上层 -->  

<TextViewandroid:id="@+id/view01"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_gravity="center"

    android:width="320px"

    android:height="320px"

    android:background="#000"

    />  

<TextViewandroid:id="@+id/view02"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_gravity="center"

    android:width="280px"

    android:height="280px"

    android:background="#00f"

    />      

<TextViewandroid:id="@+id/view03"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_gravity="center"

    android:width="240px"

    android:height="240px"

    android:background="#0f0"

    />  

<TextViewandroid:id="@+id/view04"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_gravity="center"

    android:width="200px"

    android:height="200px"

    android:background="#0ff"

    />     

<TextViewandroid:id="@+id/view05"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_gravity="center"

    android:width="160px"

    android:height="160px"

    android:background="#f00"

    />      

<TextViewandroid:id="@+id/view06"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_gravity="center"

    android:width="120px"

    android:height="120px"

    android:background="#f0f"

    />       

<TextViewandroid:id="@+id/view07"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_gravity="center"

    android:width="80px"

    android:height="80px"

    android:background="#ff0"

    />  

<TextViewandroid:id="@+id/view08"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_gravity="center"

    android:width="40px"

    android:height="40px"

    android:background="#fff"

    />       

</FrameLayout>

JAVA程序清单

packagecom.hqsA.framelayouttext;

 

import java.util.Timer;

import java.util.TimerTask;

 

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.app.Activity;

import android.view.Menu;

import android.widget.TextView;

 

public class FrameLayoutTextextends Activity {

 

private int currentColor = 0;

//定义一个颜色数组,需要在values文件夹中创建colors.xml颜色资源文件

final int[] colors = new int[] {

                    R.color.color1,

                    R.color.color2,

                    R.color.color3,

                    R.color.color4,

                    R.color.color5,

                    R.color.color6,

                    R.color.color7,

                    R.color.color8,

};

final int[] names = new int[] {

                    R.id.view01,

                    R.id.view02,

                    R.id.view03,

                    R.id.view04,

                    R.id.view05,

                    R.id.view06,

                    R.id.view07,

                    R.id.view08,

};

TextView[] views = new TextView[names.length];

Handler handler = newHandler()

{

           @Override

           //用来更新8textView的背景色

           public void handleMessage(Messagemsg)

           {

                    //表明消息来自本程序所发送

                    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

protected void onCreate(Bundle savedInstanceState) {

           super.onCreate(savedInstanceState);

           setContentView(R.layout.frame_layout_text);

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

           {

                    views[i] = (TextView) findViewById(names[i]);

           }

           //定义每0.4秒执行一次任务,该任务是向Handle发送一条信息

           //定义一个线程周期性地改变currentColor变量值

           new Timer().schedule(new TimerTask()

           {

                    @Override

                    public void run()

                    {

                             //发送一条空消息通知系统改变8TextView组件的背景色

                             handler.sendEmptyMessage(0x123);

                    }

           }, 0, 400);                             

}

}

PS:以为android的View与UI不是线程安全的,所以android不允许开发者启动线程访问用户界面的UI组件。所以不能直接在run()方法里直接更新TextView的背景色。

线性安全如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。

或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。

线程安全问题都是由全局变量静态变量引起的。

若每个线程中对全局变量静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。

效果:


2.    相对布局RelativeLayout

相对布局内的子组件的位置总是相对于兄弟组件、父容器来决定。如果A的位置由B的位置来决定,android需先定义B组件,再定义A组件。

Xml程序清单

<?xmlversion="1.0"encoding="utf-8"?>

<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

     >

    <!--定义该组件位于父容器中间 -->

    <TextView

        android:id="@+id/view01"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:background="@drawable/android"

        android:layout_centerInParent="true"

         />

    <!--定义该组件位于view01组件的上方,左边界对齐 -->

    <TextView

        android:id="@+id/view02"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:background="@drawable/android"

        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/android"

        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/android"

        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/android"

        android:layout_toRightOf="@id/view01"

        android:layout_alignTop="@id/view01"

        />

</RelativeLayout>

Java程序清单

packagecom.hqsA.relativelayouttext;

 

importandroid.os.Bundle;

importandroid.app.Activity;

importandroid.view.Menu;

 

publicclass RelativeLayoutTextextends Activity {

 

    @Override

    protectedvoidonCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.relative_layout_text);

        findViewById(R.id.view01).setPadding(5, 5 , 5 , 5);//setPadding()设置填充

        findViewById(R.id.view02).setPadding(5, 5 , 5 , 5);

        findViewById(R.id.view03).setPadding(5, 5 , 5 , 5);

        findViewById(R.id.view04).setPadding(5, 5 , 5 , 5);

        findViewById(R.id.view05).setPadding(5, 5 , 5 , 5);

    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值