【Android】組件及布局介紹

夢開始的地方,安卓開發,希望能堅持梳理整理好安卓各個知識塊,能擁有自己的理解,并表達出來,一開始肯定做的不會盡善盡美,一起加油吧加油吧。

一:代碼分析

1:Android界面開發方式

(1)Java+View(傳統視圖系統)

這是 Android 早期的開發方式,用 Java 或 Kotlin 代碼配合 XML 布局文件 來構建界面。(簡單了解即可)

分離式開發:

  • 界面布局寫在 XML 文件里(如 activity_main.xml),用各種控件(TextViewButton 等)拼出界面。
  • 邏輯代碼寫在 Java/Kotlin 文件里(如 MainActivity.java),通過 findViewById() 連接界面和代碼。

在這里插入圖片描述

(2)Jetpack Compose(新方式)

這是 Google 推出的 聲明式 UI 框架,用 Kotlin 代碼直接構建界面,無需 XML。(前面的路以后再來探索吧)

2:組件

activity中有很多控件

在這里插入圖片描述

比如說我們的按鈕Button,它繼承于TextView

在這里插入圖片描述

TextView又繼承于我們的View

注:View是安卓當中所有的UI(User Interface)控件的父類

在這里插入圖片描述

3:MainActivity類分析

在這里插入圖片描述

(1)使用java的形式聲明控件

布局和Java代碼做關聯,頁面啟動的時候就會運行onCreate方法(暫時這么理解)

package com.xlong.myapplication;import android.os.Bundle;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);return insets;});TextView textView = new TextView(this);//創建一個控件對象,this指當前的activity上下文(理解不是很深刻)textView.setTextSize(100);textView.setText("luo po gu zhong han feng chui");textView.setBackgroundColor(Color.GRAY);int w = ViewGroup.LayoutParams.MATCH_PARENT;//MATCH_PARENT代表控件寬度會填滿父容器//換個說法:當前控件的寬度與父布局大小一樣,就是左右兩邊頂著屏幕int h = ViewGroup.LayoutParams.WRAP_CONTENT;//設置控件的高度,根據內容自動調整;//換個說法:當前控件大小正好能包含里面的內容,上下頂著文字ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(w,h);//創建布局參數的對象//添加到當前的activity中addContentView(textView,layoutParams);//屬于activity的方法,把配置好的TextView添加到根布局中去//可以理解成把當前控件和當前頁面做關聯}
}

在這里插入圖片描述

"ViewGroup.LayoutParams"這是靜態內部類
在這里插入圖片描述

MainActivity對應一個頁面()這里我們創建一個TextView對象,設置文本的尺寸,內容,背景色。

在這里插入圖片描述

這里的this指的是當前的activity,可以近似看作是應用中的 “頁面”,四大組件之一的Activity主要負責管理應用的用戶界面(UI),能夠承載布局文件(比如 XML 布局)。

4:手動聲明控件(不推薦)

(1)控件頁面

我們可以在activity_main.xml中聲明控件,比如說button,switch(前面的路以后再來探索吧QWQ)

聲明很多控件,來控制頁面

在這里插入圖片描述

這些控件本質上都是xml代碼,右上角可以切換code代碼。
Android會為view以及它的子類,提供xml的引用形式

在這里插入圖片描述

在這里插入圖片描述
這是分割視圖

(2)xml方式定義控件

我們用xml方式自己添加一個圖片控件,把文本控件給擋住了

    <ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@mipmap/ic_launcher_round"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"/>

在這里插入圖片描述

這里ImageView最后四行代碼會讓圖片在父容器中居中,父容器指的就是androidx.constraintlayout.widget.ConstraintLayout

在這里插入圖片描述

  • 視圖的寬度會被拉伸至父容器的寬度(左右邊緣對齊)。
  • 視圖的高度會被拉伸至父容器的高度(上下邊緣對齊)。

(3)屬性定布局

ConstraintLayout(約束布局)就是當前布局的一種情況
它借助為視圖(View)設置約束條件(像與其他視圖的**相對位置**、距離等)來實現布局。

在這里插入圖片描述

類比——設置LinearLayout(線性布局)屬性,定義布局
它會按照水平或者垂直的單一方向來排列子視圖。

在這里插入圖片描述

在這里插入圖片描述

通常我們不會直接使用group,而是通過它的子類來使用。這也再一次印證了view是所有控件的父類,

在這里插入圖片描述

在這里插入圖片描述

5:setContentView(R.layout.activity_main)

下面那個方法是父類提供的,這個方法讓java頁面與xml布局進行關聯

在這里插入圖片描述

R指的是當前工程下res下的工程資源在java代碼下的映射

訪問布局R.layout.activity_main 類比 訪問圖片R.mipmap-xhdpi.ic_launcher

在這里插入圖片描述

6:沉浸式布局

(暫時先這么理解,前方的路,以后再來探索吧QWQ)

第一個紅框控制沉浸式

第二個是為了有更好的沉浸式體驗
在這里插入圖片描述

有無這兩行代碼的區別

注意手機頂部很明顯有大不同。

在這里插入圖片描述

二:View和ViewGroup比較

在安卓中,所有的UI控件或者布局,都是View的子類。我們可以使用Java或者xml的形式來引用它們。

  1. View通常用來繪制一個看得見并且可以交互的元素,比如文本、圖片、按鈕、進度條;
  2. View還有一個叫做ViewGroup的子類,ViewGroup更多的時候是一個看不見的容器可以用來存放其他控件或者布局==。==但我們一般不會直接使用ViewGroup管理布局,而是使用它的子類,比如常見的LinearLayout(線性布局)、ConstraintLayout(約束布局)、RelativeLayout(相對布局);
  3. 在一個Activity頁面中的布局,一般都是如下圖的結構,一個頁面的根布局ViewGroup下面(如 ConstraintLayout 作為根 ),還有其他的View,或者其他的下級ViewGroup:

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90328.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90328.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90328.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android 音視頻 IPC序列化工具-Flattenable

Android Binder與AIDL與Service使用案例及分析-CSDN博客 講講這個類,被用在Android音視頻中,跨進程序列化反序列化用。與Binder驅動有很強的聯系。位于: feameworks/native/utils/Flattenable.h Flattenable, 譯為令人滿意的。可能是作者十分滿意自己的這些作品吧,起了這…

文獻學習|全面繪制和建模水稻調控組景觀揭示了復雜性狀背后的調控架構。

摘要&#xff1a; 解析調控復雜性狀的機制對于推進作物改良至關重要。在此&#xff0c;我們提出了一個全面的水稻&#xff08;Oryza sativa&#xff09;調控組圖譜&#xff0c;涵蓋了來自三個代表性品種的23種不同組織的染色質可及性。我們的研究揭示了117,176個獨特的開放染色…

Linux的壓縮與解壓縮

一、使用tar命令進行打包與解包 1.0、tar命令簡介和常用選項 tar命令是Linux中經常使用的歸檔工具&#xff0c;它的主要功能是【對文件或者目錄進行打包歸檔】&#xff0c;歸檔為一個文件&#xff0c;但是并不進行壓縮&#xff1b;tar命令的歸檔操作效果如下&#xff1a; tar命…

OpenCV+OCR實現弧形文字識別

以下是基于OpenCV與OCR實現弧形文字識別的完整技術方案&#xff0c;結合了圖像預處理、幾何變換與OCR引擎調用等關鍵步驟&#xff0c;并提供優化技巧&#xff1a;&#x1f50d; 一、技術原理弧形文字識別的核心在于??將彎曲文本轉換為水平直線??&#xff0c;便于OCR引擎處理…

【保姆級目標檢測教程】Ubuntu 20.04 部署 YOLOv13 全流程(附訓練/推理代碼)

前言 YOLOv13 是 YOLO 系列的全新一代實時目標檢測框架&#xff0c;在保持極高推理速度的同時顯著提升了檢測精度&#xff0c;廣泛適用于嵌入式部署、工業質檢、智能安防等多種場景。該版本提供了 Nano、Small、Large、X-Large 四種模型規格&#xff0c;用戶可以根據計算資源和…

【大模型】到底什么是Function Calling和MCP,以及和ReAct推理的關系是什么?

文章目錄背景&#xff1a;什么是Agent&#xff1f;背景&#xff1a;為什么需要Function Calling或者MCP&#xff1f;Function Calling和MCP在用戶請求中的整體流程Function Calling&#xff08;函數/工具調用&#xff09;MCP (Model Context Protocol)ReAct (Reasoning and Act…

CANDENCE 17.4 進行元器件緩存更新

在我從立創商城導入CANDENCE元器件后&#xff0c;在ORCAD放置元器件時出現了下面的錯誤解決辦法&#xff1a;1、在左邊找到 Design Cache文件夾&#xff0c;在文件夾上鼠標右擊選擇 Cleanup Cache2、再放置該元器件&#xff0c;不管這個&#xff0c;點擊確定3、這時候成功放上…

深入理解Kafka冪等性:原理、邊界與最佳實踐

一、什么是真正的消息冪等性&#xff1f; 消息系統的冪等性經常被誤解&#xff0c;我們需要明確其精確含義和能力邊界&#xff1a; 1. 正確定義 Kafka冪等性保證的是&#xff1a;在消息傳輸過程中&#xff0c;無論因網絡重試、生產者重啟等故障導致的消息重復發送&#xff0c;B…

【RTSP從零實踐】8、多播傳輸H264碼流的RTSP服務器——最簡單的實現例子(附帶源碼)

&#x1f601;博客主頁&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客內容&#x1f911;&#xff1a;&#x1f36d;嵌入式開發、Linux、C語言、C、數據結構、音視頻&#x1f36d; &#x1f923;本文內容&#x1f923;&a…

【Linux】基礎開發工具(3)

1. 版本控制器Git1.1 Git的簡史Git 的歷史可以追溯到 2005 年1。當時 Linux 內核項目的開發團隊一直使用 BitKeeper 進行版本管理&#xff0c;但由于一位 Linux 開發成員寫了一個連接 BitKeeper 倉庫的外掛&#xff0c;BitMover 公司決定中止 Linux 免費使用 BitKeeper 的授權1…

synchronized 的使用和特性

synchronized 鎖對象 普通方法 synchronized 鎖普通方法時&#xff0c;其鎖的對象是調用該方法的實例 public synchronized void method() { // 方法體 } 靜態方法 靜態方法的鎖對象是所屬的 class&#xff0c;全局只有一個。 public static synchronized void staticMetho…

Gin Web 層集成 Viper 配置文件和 Zap 日志文件指南(下)

在微服務架構中&#xff0c;Gin 常被用作 Web 層框架&#xff0c;而 Viper 用于管理配置文件&#xff0c;Zap 則提供高性能的日志記錄功能。下面將詳細介紹如何在 Gin Web 層集成 Viper 配置文件和 Zap 日志文件。 1. 項目概述 假設我們有一個基于 Go 語言的微服務項目&#…

IoTDB:專為物聯網場景設計的高性能時序數據庫

什么是IoTDB&#xff1f;IoTDB&#xff08;Internet of Things Database&#xff09;是一款開源的時序數據庫管理系統&#xff0c;專為物聯網&#xff08;IoT&#xff09;場景設計&#xff0c;由清華大學軟件學院團隊自研&#xff0c;天謀科技團隊負責維護。它針對物聯網數據的…

[netty5: MessageAggregator HttpObjectAggregator]-源碼解析

在閱讀這篇文章前&#xff0c;推薦先閱讀 [netty5: ByteToMessageCodec & MessageToByteEncoder & ByteToMessageDecoder]-源碼分析[netty5: HttpObject]-源碼解析 100-continue 100-continue 是 HTTP/1.1 協議中的一種機制&#xff0c;用于客戶端在發送大體積請求體…

前端學習1--行內元素 vs 塊級元素(基礎概念+案例實操)

一、內外邊距學習&#xff1a;&#xff08;1&#xff09;簡單理解&#xff1a;padding為內邊距。padding不會影響元素的位置&#xff0c;只會調整元素的內容&#xff08;文字&#xff09;與邊框之間的間距。margin為外邊距。margin會影響元素在流式布局中的位置&#xff0c;改變…

Express + mysql2 + jwt 實現簡單的登錄鑒權

目前項目中使用Express 實現簡單API功能&#xff0c;需要提供一套登錄鑒權方案。這邊是API側實現 相關路由的登錄鑒權。大體思路&#xff1a;就是&#xff0c;登錄接口中通過jwt加密 token返回前端&#xff0c;前端其他接口把加密好的放入請求頭Authorization中。中間件通過請求…

ReAct (Reason and Act) OR 強化學習(Reinforcement Learning, RL)

這個問題觸及了現代AI智能體&#xff08;Agent&#xff09;構建的兩種核心思想。 簡單來說&#xff0c;ReAct 是一種“調用專家”的模式&#xff0c;而強化學習 (RL) 是一種“從零試錯”的模式。 為了讓你更清晰地理解&#xff0c;我們從一個生動的比喻開始&#xff0c;然后進行…

iTwinjs 4.10-4.11 更新

撤銷更改 目前&#xff0c;撤銷一個有缺陷的變更集的唯一方法是從 iModel Hub 中移除它&#xff0c;這可能會導致許多副作用&#xff08;無法撤銷&#xff09;。一個更好的方法是在時間線中撤銷變更集&#xff0c;并將其作為新的變更集引入。盡管這種方法仍然具有侵入性&#…

【CSS-15】深入理解CSS transition-duration:掌握過渡動畫的時長控制

在現代網頁設計中&#xff0c;平滑的過渡效果是提升用戶體驗的關鍵因素之一。CSS transitions 為我們提供了一種簡單而強大的方式來實現元素在不同狀態之間的平滑過渡&#xff0c;而 transition-duration 屬性則是控制這些過渡效果時長的核心工具。本文將全面探討 transition-d…

mysql-筆記

1. 安裝mysql # 使用brew安裝 brew install mysql# 查看是否安裝成功 mysql -V 相關文檔&#xff1a; mac&#xff1a;macOS下MySQL 8.0 安裝與配置教程 - KenTalk - 博客園 Linux安裝&#xff1a;linux安裝mysql客戶端_linux mysql 客戶端-CSDN博客 2. 啟動mysql 每次使…