Android的布局(三)

前面大概了解了两个常用的布局,线性布局和相对布局,接下来看看其他布局
一、TableLayout
TableLayout继承LinearLayout,其有个特殊的子节点TableRow,这个TableRow相当于一个orientation属性值为horizontal的LinearLayout,然后添加多个TableRow排成多行,形成一个类似表格的界面。
TableLayout常用的属性:
android:shrinkColumns 设置允许被收缩的列的序列号
android:stretchColumns设置允许被拉伸的列的序列号
android:collapseColumns设置需要被隐藏的序列号
序列号指TableRow里的子组件的从左至右的顺序,并且从0开始,选择多个序列号时可以用逗号隔开
基本使用:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:stretchColumns="1,2"
    android:collapseColumns="0"
    tools:context="com.example.yougel.otherlayoutdemo.TableLayoutActivity">
        <TableRow>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮一"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮二"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮三"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮四"
            />
    </TableRow>
    <TableRow>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮五"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮六"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮七"
            />
    </TableRow>
    <TableRow>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮八"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮九"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮十"
            />
    </TableRow>
</TableLayout>

这里写图片描述

二、FrameLayout
FrameLayout(帧布局)也有的叫层布局,层布局的概念布局好理解,所以我就用层的概念来总结一下FrameLayout
我们从手机来看的FrameLayout:
这里写图片描述
其实它是层层布局的,从3D角度看:
这里写图片描述
(当然楼主画工差就不过多自槽)
基本使用:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.yougel.otherlayoutdemo.FrameLayoutActivity">

    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@color/color1"
        android:width="320dp"
        android:height="320dp"
        />
    <TextView
        android:id="@+id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@color/color2"
        android:width="280dp"
        android:height="280dp"
        />
    <TextView
        android:id="@+id/text3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@color/color3"
        android:width="240dp"
        android:height="240dp"
        />
    <TextView
        android:id="@+id/text4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@color/color4"
        android:width="200dp"
        android:height="200dp"
        />
    <TextView
        android:id="@+id/text5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@color/color5"
        android:width="160dp"
        android:height="160dp"
        />
    <TextView
        android:id="@+id/text6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@color/color6"
        android:width="120dp"
        android:height="120dp"
        />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/start"
            android:layout_weight="1"
            android:text="开始"/>
        <Button
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/stop"
            android:text="停止"/>
    </LinearLayout>
</FrameLayout>

Activity:

package com.example.yougel.otherlayoutdemo;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.Timer;
import java.util.TimerTask;

public class FrameLayoutActivity extends AppCompatActivity {

    Button start,stop;
    //设置颜色数组
    int[] colors={
            R.color.color1,
            R.color.color2,
            R.color.color3,
            R.color.color4,
            R.color.color5,
            R.color.color6
    };
    int changeColor=0;
    //设置textView数组
    int[] names={
            R.id.text1,
            R.id.text2,
            R.id.text3,
            R.id.text4,
            R.id.text5,
            R.id.text6
    };
    boolean isPause;

    TextView[] views=new TextView[names.length];
    //设置handler
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            if(msg.what==110&&isPause==false){
                for(int i=0;i<names.length;i++){
                    views[i].setBackgroundResource(colors[(i+changeColor)%colors.length]);
                }
                changeColor++;
            }
            super.handleMessage(msg);
        }
    };

    Timer timer=new Timer();
    //设置timer
    public void setTimer(){
        isPause=false;
        TimerTask timerTask=new TimerTask() {
            @Override
            public void run() {
                handler.sendEmptyMessage(110);

            }
        };
        timer.schedule(timerTask,0,500);

    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_frame_layout);
        for(int i=0;i<names.length;i++){
            views[i]= (TextView) findViewById(names[i]);
        }
        start= (Button) findViewById(R.id.start);
        stop=(Button)findViewById(R.id.stop);
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setTimer();
            }
        });
        stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                isPause=true;
            }
        });
    }
}

上面代码通过设置一个定时器Timer类来定时更改FrameLayout中每个TextView的颜色,形成类似霓虹灯的效果。
在在这里有个常识就是Android中子线程是无法修改UI主线程界面的,由于Timer的使用需要新建子线程,这里就采用Handle的发送消息的方式对主线程界面进行修改。
至于AbsoluteLayout(绝对布局)就不多说了,我们可以将子组件放到布局中指定的座标处,但不利于兼容不同尺寸的设备,所以在高版本的API是弃用的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章