主頁 > 移動端開發 > Andriod開發學習——Android UI基礎知識1.1

Andriod開發學習——Android UI基礎知識1.1

2021-07-31 08:34:36 移動端開發

Andriod開發學習——Android UI基礎知識1.1

  • 01 Android UI簡介
    • 1.1 UI
    • 1.2 Android UI
  • 02 布局
    • 2.1 布局的結構
    • 2.2 宣告布局
    • 2.3 撰寫XML
    • 2.4 加載 XML 資源
    • 2.5 屬性
    • 2.6 ID
    • 2.7 布局引數 LayoutParams
    • 2.8 布局位置
    • 2.9 內邊距和外邊距

01 Android UI簡介

1.1 UI

  1. 用戶界面(User Interface,簡稱 UI,亦稱使用者界面)是系統和用戶之間進行互動和資訊交換的媒介,它實作資訊的內部形式與人類可以接受形式之間的轉換,
  2. 軟體設計可分為兩個部分:編碼設計UI設計

1.2 Android UI

  1. Android應用界面包含用戶可查看并與之互動的所有內容,
  2. Android 提供豐富多樣的預置 UI 組件,例如結構化布局物件和 UI控制元件,您可以利用這些組件為您的應用構建圖形界,
  3. Android 還提供其他界面模塊,用于構建特殊界面,例如對話框、通知和選單,
  4. Android UI 都是由布局控制元件組成的,

02 布局

  1. 布局(layout)可定義應用中的界面結構(例如 Activity 的界面結構),布局中的所有元素均使用 ViewViewGroup 物件的層次結構進行構建,
  2. View 通常繪制用戶可查看并進行互動的內容
  3. 而ViewGroup 是不可見容器,用于定義 View 和其他 ViewGroup 物件的布局結構,

2.1 布局的結構

定義界面布局的視圖層次結構圖示:

在這里插入圖片描述

  1. View 物件通常稱為“微件”,可以是眾多子類之一,例如 Button 或 TextView ,
  2. ViewGroup物件通常稱為“布局”,可以是提供其他布局結構的眾多型別之一,例如LinearLayout 或 ConstraintLayout ,

2.2 宣告布局

  1. 在 XML 中宣告界面元素,Android 提供對應 View 類及其子類的簡明 XML 詞匯,如用于微件和布局的詞匯,
    當然也可使用 Android Studio 的 Layout Editor,并采用拖放界面來構建 XML 布局,如下圖所示是app/res/layout下的activity_main.xmlCode
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="168dp"
        android:layout_marginTop="356dp"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

這張圖所示是app/res/layout下的activity_main.xmlDesign
在這里插入圖片描述

  1. 在運行時實體化布局元素,您的應用可通過編程創建 View 物件和 ViewGroup物件(并操縱其屬性),
ConstraintLayout constraintLayout = new ConstraintLayout(this);
TextView view = new TextView(this);
view.setText("Hello World!");
constraintLayout.addView(view);
  • 提示 : 使用 Layout Inspector 除錯布局,可以查看通過代碼創建的布局
  1. 在連接的設備或模擬器上[運行您的應用],
  2. 依次點擊 Tools > Layout Inspector,
  3. 在顯示的 Choose Process 對話框中,選擇要檢查的應用行程,然后點擊 OK,

2.3 撰寫XML

  1. 利用 Android 的 XML 詞匯,按照在 HTML 中創建包含一系列嵌套元素的網頁的相同方式快速設計UI布局及其包含的螢屏元素,
  2. 每個布局檔案都必須只包含一個根元素,并且該元素必須是視圖物件或 ViewGroup 物件
  3. 定義根元素后,可以子元素的形式添加其他布局物件或控制元件,從而逐步構建定義布局的視圖層次結構,
  4. 在 XML 中宣告布局后,以 .xml 擴展名將檔案保存在Android 專案的 res/layout/ 目錄中,
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
			android:layout_width="match_parent"
			android:layout_height="match_parent"
			android:orientation="vertical" >
  <TextView android:id="@+id/text"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:text="Hello, I am a TextView" />
    <Button android:id="@+id/button"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:text="Hello, I am a Button" />
</LinearLayout>

2.4 加載 XML 資源

當編譯應用時,系統會將每個 XML 布局檔案編譯成 View 資源,在Activity.onCreate() 回呼內,通過呼叫 setContentView() ,并以R.layout.layout_file_name 形式向應用代碼傳遞布局資源的參考 ,加載應用代碼中的布局資源,

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);
}

2.5 屬性

每個 View 物件和 ViewGroup 物件均支持自己的各種 XML 屬性 ,某些屬性是 View 物件的特有屬性(例如,TextView 支持 textSize 屬性),但可擴展此類的任一 View 物件也會繼承這些屬性,某些屬性是所有 View 物件的共有屬性,因為它們繼承自 View 根類(例如 id 屬性),此外,其他屬性被視為“布局引數”,即描述 View 物件特定布局方向的屬性,如由該物件的父ViewGroup 物件定義的屬性,

<TextView
	android:id="@+id/tv"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:text="Hello World!"
	android:textSize="24sp"/>
<Button
	android:id="@+id/btn"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:text="按鈕"/>

2.6 ID

任何 View 物件均可擁有與之關聯的整型 ID,用于在結構樹中對 View 物件進行唯一標識,編譯應用后,系統會以整型形式參考此 ID,但在布局 XML 檔案中,系統通常會以字串的形式在 id屬性中指定該 ID,這是所有 View 物件共有的 XML 屬性(由 View 類定義),并且您會經常使用該屬性,

  • XML 標記內部的 ID 語法是:
android:id="@+id/tv"
  • 字串開頭處的 @ 符號指示 XML 決議器應決議并展開 ID 字串的其余部分,并將其標識為 ID 資源,加號 (+) 表示這是一個新的資源名稱,必須創建該名稱并將其添加到我們的資源(在 R.java檔案中)內,
  • Android 框架還提供許多其他 ID 資源,參考 Android 資源 ID 時,不需要加號,但必須添加 android 軟體包命名空間,
android:id="@android:id/empty"

添加 android 軟體包命名空間后,我們現在將從 android.R 資源類而非本地資源類參考 ID.R.java 檔案

  • tips: @+id 和 @id區別:其實@+id就是在R.java檔案里新增一個id名稱,如果之前已經存在相同的id名稱,那么會覆寫之前的名稱,而@id則是直接參考R.java檔案的存在的id資源,如果不存在,會編譯報錯,

注意:ID 字串名稱,在同一布局中必須是唯一的,不能重名,不同布局中可以同名;同時也可以通過ID值創建我們視圖物件的實體,

<TextView
	android:id="@+id/tv"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:text="Hello World!"
	android:textSize="24sp"/>
TextView textView = (TextView) findViewById(R.id.tv);

2.7 布局引數 LayoutParams

  • layout_*** 的布局屬性
<TextView
	android:layout_width="100dp"
	android:layout_height="200dp"
	android:layout_marginLeft="10dp" //左邊距
	android:layout_marginTop="10dp" //上邊距
	android:text="Hello World!" />
  • 布局引數作用是給我們的視圖設定在布局中位置和大小
  • ViewGroup 類會實作一個擴展 ViewGroup.LayoutParams 的嵌套類,里面包含一些設定視圖view 的尺寸和位置的屬性,
    視圖層次結構圖,包含每個視圖關聯的布局引數:
    在這里插入圖片描述
TextView tv = new TextView(this);
LinearLayout linearLayout = new LinearLayout(this);
LinearLayout.LayoutParams layoutParams =
(LinearLayout.LayoutParams)tv.getLayoutParams();
layoutParams.leftMargin = 30; //左邊距
layoutParams.topMargin = 30;//上邊距
layoutParams.width = 100;//寬
layoutParams.height = 200;//高
tv.setLayoutParams(layoutParams);
linearLayout.addView(tv);
  • 一般而言,建議不要使用絕對單位(如像素)來指定布局寬度和高度,更好的方法是使用相對測量單位(如與密度無關的像素單位 (dp)wrap_contentmatch_parent ),因為其有助于確保應用在各類尺寸的設備螢屏上正確顯示,
  • wrap_content 指示您的視圖將其大小調整為內容所需的尺寸,
  • match_parent指示您的視圖盡可能采用其父視圖組所允許的最大尺寸,

2.8 布局位置

  • 視圖可以通過呼叫 getLeft() 方法和 getTop() 方法來獲取視圖的坐標位置 ,也可以通過getWidth()getHeight() 獲取視圖的尺寸,這些方法回傳的值是相對于其父視圖的位置,
  • 位置和尺寸的單位是像素( px ),
  • px 與 dp 區別
  • px 即像素,1px代表螢屏上一個物理的像素點
    給視圖設定px單位,不同解析度下,尺寸不一樣,
  • dp (dip) Density independent pixels ,設備無關像素,它與“像素密度”密切相關 ;
    dpi像素密度: 每英寸包含的像素數
    在這里插入圖片描述

2.9 內邊距和外邊距

在這里插入圖片描述
在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/291066.html

標籤:其他

上一篇:gradle 生成 JavaDoc

下一篇:鴻蒙 底部導航,中間凸起頁面

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more