android FrameLayout詳解

来源:http://www.cnblogs.com/androidWuYou/archive/2016/09/22/5886724.html
-Advertisement-
Play Games

首先看演示: FrameLayout框架佈局是最簡單的佈局形式。所有添加到這個佈局中的視圖都以層疊的方式顯示。第一個添加的控制項被放在最底層,最後一個添加到框架佈局中的視圖顯示在最頂層,上一層的控制項會覆蓋下一層的控制項。這種顯示方式有些類似於堆棧。 當我們往裡面添加組件的時候,所有的組件都會放置於這塊區 ...


首先看演示:

       FrameLayout框架佈局是最簡單的佈局形式。所有添加到這個佈局中的視圖都以層疊的方式顯示。第一個添加的控制項被放在最底層,最後一個添加到框架佈局中的視圖顯示在最頂層,上一層的控制項會覆蓋下一層的控制項。這種顯示方式有些類似於堆棧。

當我們往裡面添加組件的時候,所有的組件都會放置於這塊區域的左上角;

幀佈局的大小由子控制項中最大的子控制項決定,如果都組件都一樣大的話,同一時刻就只能看到最上面的那個組件了。

1 layout_gravity

      FrameLayout根本無法控制他的子控制項的位置,子控制項可以通過android:layout_gravity屬性來控制自己在父控制項中的位置,從而制定組件的對其方式。

2 layout_margin

        FrameLayout佈局裡面的控制項單獨設置layout_margin類的屬性沒有效果。FrameLayout中的控制項layout_margin設置要依賴layout_gravity屬性,否則layout_margin設置無效。layout_gravity有好幾個值可以設置,具體要設置哪一個呢?其實layout_gravity可以理解為設置控制項的參考點,控制項最終顯示位置最終由layout_gravity和layout_margin共同決定。

  如果想要控制項正常顯示,可以將控制項的layout_gravity設置為top,以屏幕左上角為參考點。

3 前景圖像:

       永遠處於幀佈局最頂的,直接面對用戶的圖像,,就是不會被覆蓋的圖片

常用屬性:

   android:foreground:設置該幀佈局容器的前景圖像

     android:foregroundGravity:設置前景圖像顯示的位置

幀佈局在游戲開發方面用的比較多。當你需要自己寫一個View的時候,在View裡面已經完成了你的邏輯(例如游戲^_^),那麼這個View只需要一個容器放置,就可以使用FrameLayout了。雖然用其他的佈局也可以,但是用最簡單的不是更省系統資源麽。

3應用實例

 activity代碼

package mm.shandong.com.testframelayout;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;

public class TestFrameLayoutActivity extends AppCompatActivity {
    FrameLayout frameLayout;
    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_frame_layout);
        btn = (Button) findViewById(R.id.btn);
        frameLayout = (FrameLayout) findViewById(R.id.frameLayout);
        frameLayout.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                int x = (int) motionEvent.getX();
                int y = (int) motionEvent.getY();
                int width = btn.getWidth();
                int height = btn.getHeight();
                btn.layout(x, y, x + width, y + height);
                return false;
            }
        });
    }
}

xml代碼

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="下麵是一個FrameLayout,預設佈局" />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:background="#ff0000">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="第一層"
            android:textColor="#00ff00"
            android:textSize="55sp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="第二層"
            android:textColor="#0000ff"
            android:textSize="45sp" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="第三層"
            android:textColor="#00ffff"
            android:textSize="35sp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="第四層"
            android:textColor="#ffff00"
            android:textSize="25sp" />
    </FrameLayout>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="下麵是一個FrameLayout,通過layout_gravity和margin調節位置,並設置前景圖片和背景顏色" />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="180dp"
        android:background="#ff0000"
        android:foreground="@drawable/red"
        android:foregroundGravity="right|bottom">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="top|left"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="0dp"
            android:text="左上 left:20 Top:0"
            android:textColor="#00ff00"
            android:textSize="15sp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="top|left"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="25dp"
            android:text="左上 left:20 Top:25"
            android:textColor="#00aa00"
            android:textSize="15sp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|left"
            android:layout_marginBottom="20dp"
            android:layout_marginLeft="45dp"
            android:text="左下 left:45 Bottom:20"
            android:textColor="#0000ff"
            android:textSize="15sp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="居中"
            android:textColor="#00ffff"
            android:textSize="15sp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right|top"
            android:layout_marginTop="30dp"
            android:text="右上 top 30"
            android:textColor="#ffff00"
            android:textSize="15sp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right|bottom"
            android:layout_marginBottom="80dp"
            android:text="最上層,仍被遮蓋"
            android:textSize="15sp" />
    </FrameLayout>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="下麵是一個FrameLayout,通過layout方法設置控制項具體位置,請單擊framelayou" />

    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ff0000">

        <Button
            android:id="@+id/btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="請點擊別處" />
    </FrameLayout>
</LinearLayout>

  

  

本人微博:honey_11

Demo下載
最後,以上例子都來源與安卓無憂,請去應用寶或者豌豆莢下載:例子源碼,源碼例子文檔一網打盡

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 通常我們對最終設計至關重要,但在幕後有很多流程,例如草圖。 草圖是是把想法作為一種思想框架描繪出來。 有時客戶需要一個獨特的品牌新標識或字體更方便畫在紙上,之後掃描到 Photoshop 和 Illustrator。這裡分享20個新穎的字體設計草圖,帶給你靈感。 ...
  • 簡介 TypeScript是一種由微軟開發的自由和開源的編程語言。它是JavaScript的一個超集,而且本質上向這個語言添加了可選的靜態類型和基於類的面向對象編程。安德斯·海爾斯伯格,C#的首席架構師,已工作於TypeScript的開發。 TypeScript擴展了 JavaScript 的句法, ...
  • CSS 邊框即CSS border-border邊框樣式顏色、邊框樣式、邊框寬度的語法結構與應用案例教程篇 一、CSS 邊框基礎知識 CSS 邊框即CSS border是控制對象的邊框邊線寬度、顏色、虛線、實線等樣式CSS屬性。同時大家可以進入碼農教程提供CSS手冊查看border手冊:http:/ ...
  • 以前只用過JavaScript原生寫網站特效,今天還是第一次聽說typescript的,然後看了一下它的基本知識,感覺很像Java,真的太像了,但是又有不同點。很讓我驚奇看到的第一個知識點就和以前不同,很新鮮。 變數的聲明: 在typescript中我知道的變數的聲明有兩種(除了var),分別是le ...
  • 1、RegExp:Regular Expression,創建封裝正則表達式: ①正則直接量:var reg=/reg/ig;②var reg=new RegExp(“reg”,“ig”); 2、RegExp API: ①找每個關鍵詞,並獲得位置:var arr=reg.exec(str);預設從頭開 ...
  • 說明 跨域主要是由於瀏覽器的“同源策略”引起,分為多種類型,本文主要探討Ajax請求跨域問題 前言 參考來源 什麼是跨域 ajax跨域的表現 跨域的原理 如何解決跨域問題 JSONP方式解決跨域問題 CROS解決跨域問題 CROS請求原理 PHP後臺配置 JAVA後臺配置 .NET後臺配置 FAQ ...
  • 開本系列,討論一些有趣的 CSS 題目,拋開實用性而言,一些題目為了拓寬一下解決問題的思路,此外,涉及一些容易忽視的 CSS 細節。 解題不考慮相容性,題目天馬行空,想到什麼說什麼,如果解題中有你感覺到生僻的 CSS 屬性,趕緊去補習一下吧。 不斷更新,不斷更新,不斷更新,重要的事情說三遍。 彙總在 ...
  • × 目錄 [1]作用域安全 [2]惰性載入 [3]函數綁定 前面的話 函數對任何一門語言來說都是一個核心的概念,在javascript中更是如此。前面曾以深入理解函數系列的形式介紹了函數的相關內容,本文將再深入一步,介紹函數的3個高級技巧 技巧一:作用域安全的構造函數 構造函數其實就是一個使用new ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...