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是棄用的。

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