Android UI 控件詳解實踐

一、UI 開發基礎概念(初學者必看)

在學習具體控件前,先理解以下核心概念,能大幅降低后續學習難度:

1. View 與 ViewGroup 的關系
  • View:所有 UI 控件的基類(如 Button、TextView),是一個 “可視元素”。
  • ViewGroup:特殊的 View,可包含多個 View(如 LinearLayout、ConstraintLayout),是 “容器”。
  • 關系:ViewGroup → View → 子 View → 子 ViewGroup → 子 View(形成樹狀結構)。
2. 尺寸單位
  • px(像素):屏幕實際像素點,不推薦直接使用(不同設備像素密度不同,顯示效果不一致)。
  • dp(密度無關像素):推薦單位,系統會根據屏幕密度自動轉換為 px(如 1dp 在低密度屏幕≈1px,高密度≈2px)。
  • sp(縮放像素):專門用于文字大小,會隨用戶設置的字體大小縮放(建議文字用 sp,其他用 dp)。
3. 資源引用規則

在 XML 中引用資源的統一格式:

@[資源類型]/[資源名稱]  <!-- 引用已有資源 -->
@+[資源類型]/[資源名稱] <!-- 定義新資源(如ID) -->
android:text="@string/hello"     <!-- 引用strings.xml中的字符串 -->
android:src="@drawable/icon"    <!-- 引用drawable目錄下的圖片 -->
android:id="@+id/btn_login"     <!-- 定義新ID -->

二、核心控件屬性詳解(附示例)

1. 文本控件(TextView & EditText)

TextView 示例

<TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/welcome"android:textSize="20sp"android:textColor="#333333"android:textStyle="bold"android:maxLines="2"android:ellipsize="end"android:padding="10dp"android:gravity="center"/>

EditText 示例

<EditTextandroid:id="@+id/et_username"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="@string/input_username"android:textSize="16sp"android:inputType="textPersonName"android:maxLength="20"android:padding="12dp"android:background="@drawable/round_edittext_bg"/>
2. 按鈕控件(Button & ImageButton)

Button 示例

<Buttonandroid:id="@+id/btn_login"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/login"android:textSize="18sp"android:textColor="#FFFFFF"android:background="@drawable/btn_selector" <!-- 狀態選擇器(按下/正常) -->android:padding="14dp"android:layout_marginTop="20dp"/>

ImageButton 示例

<ImageButtonandroid:id="@+id/btn_back"android:layout_width="48dp"android:layout_height="48dp"android:src="@drawable/ic_back"android:background="@android:color/transparent" <!-- 透明背景 -->android:contentDescription="@string/back"/>
3. 圖片控件(ImageView)

示例(頭像顯示)

<ImageViewandroid:id="@+id/iv_avatar"android:layout_width="80dp"android:layout_height="80dp"android:src="@drawable/default_avatar"android:scaleType="centerCrop" <!-- 居中裁剪,避免變形 -->android:background="@drawable/circle_bg" <!-- 圓形背景 -->android:padding="2dp"/>

三、布局容器實戰(重點難點)

1. LinearLayout 權重(weight)詳解

場景:橫向三個按鈕,等寬分布

<LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:layout_width="0dp" <!-- 必須設置為0dp -->android:layout_height="wrap_content"android:layout_weight="1"android:text="按鈕1"/><Buttonandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="按鈕2"/><Buttonandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="按鈕3"/>
</LinearLayout>

原理:總權重為 3,每個按鈕權重 1,各占 1/3 寬度。

2. ConstraintLayout 約束實踐

場景:實現一個登錄表單(用戶名、密碼、登錄按鈕)

<androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/iv_logo"android:layout_width="100dp"android:layout_height="100dp"android:src="@drawable/logo"app:layout_constraintTop_toTopOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.2"/> <!-- 垂直偏移20% --><EditTextandroid:id="@+id/et_username"android:layout_width="0dp" <!-- 0dp表示受約束控制 -->android:layout_height="wrap_content"android:hint="用戶名"app:layout_constraintTop_toBottomOf="@id/iv_logo"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"android:layout_marginTop="40dp"android:layout_marginStart="30dp"android:layout_marginEnd="30dp"/><EditTextandroid:id="@+id/et_password"android:layout_width="0dp"android:layout_height="wrap_content"android:hint="密碼"android:inputType="textPassword"app:layout_constraintTop_toBottomOf="@id/et_username"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"android:layout_marginTop="20dp"android:layout_marginStart="30dp"android:layout_marginEnd="30dp"/><Buttonandroid:id="@+id/btn_login"android:layout_width="0dp"android:layout_height="wrap_content"android:text="登錄"app:layout_constraintTop_toBottomOf="@id/et_password"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"android:layout_marginTop="40dp"android:layout_marginStart="30dp"android:layout_marginEnd="30dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>

約束要點

  • toTopOf/toBottomOf/toStartOf/toEndOf:指定相對于其他控件的位置。
  • 0dp:表示寬度 / 高度由約束自動計算。
  • bias:偏移量(0-1),控制水平 / 垂直方向的位置。

四、自定義控件樣式(提升 UI 顏值)

1. 自定義圓角按鈕

創建res/drawable/btn_rounded.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#4CAF50"/> <!-- 填充色 --><corners android:radius="24dp"/> <!-- 圓角半徑 --><paddingandroid:bottom="12dp"android:left="24dp"android:right="24dp"android:top="12dp"/> <!-- 內邊距 -->
</shape>

在 Button 中引用:

<Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="圓角按鈕"android:background="@drawable/btn_rounded"/>
2. 按鈕狀態選擇器(按下 / 正常效果)

創建res/drawable/btn_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="true"android:drawable="@drawable/btn_pressed"/> <!-- 按下狀態 --><item android:state_focused="true"android:drawable="@drawable/btn_focused"/> <!-- 聚焦狀態 --><item android:drawable="@drawable/btn_normal"/> <!-- 默認狀態 -->
</selector>

五、常見問題與解決方案(避坑指南)

1. 文本顯示不全(超出屏幕)

原因:未設置maxLinesellipsize
解決方案

<TextViewandroid:maxLines="2"android:ellipsize="end"/>
2. 圖片顯示變形

原因:未設置scaleType,默認fitXY會拉伸圖片。
解決方案

<ImageViewandroid:scaleType="centerCrop"/> <!-- 常用裁剪模式 -->
3. 布局層級過深導致卡頓

優化方案

  • 使用 ConstraintLayout 減少嵌套。
  • 使用<merge>標簽合并布局層級。
  • 復雜布局考慮使用<ViewStub>延遲加載。

六、學習資源推薦(初學者必收藏)

  1. 官方文檔
    • Android Developers - UI 組件
    • ConstraintLayout 官方指南
  2. 優質教程
    • Google Codelabs - Android UI 開發
  3. UI 設計資源
    • Material Design:官方設計語言指南。
    • IconFont:免費圖標庫(適配 Android)。

總結

掌握 Android UI 開發的關鍵在于:

  1. 理解基礎概念(View/ViewGroup、尺寸單位、資源引用)。
  2. 熟悉核心控件屬性(特別是文本、按鈕、圖片控件)。
  3. 精通布局容器(LinearLayout 權重、ConstraintLayout 約束)。
  4. 多實踐多試錯(遇到問題先查官方文檔,再看 Stack Overflow)。

?

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

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

相關文章

關于linux運維 出現高頻的模塊認知

一、Linux 基礎核心&#xff08;必掌握&#xff09;核心工具&#xff1a;Shell 腳本、Systemd、用戶權限管理、日志分析&#xff08;journalctl、rsyslog&#xff09;企業需求&#xff1a;中小型公司&#xff1a;需獨立完成系統部署、故障排查&#xff0c;對腳本開發&#xff0…

手語式映射:Kinova Gen3 力控機械臂自適應控制的研究與應用

近日&#xff0c;美國明尼蘇達大學研究團隊在《從人手到機械臂&#xff1a;遙操作中運動技能具身化研究》中&#xff0c;成功開發出基于??Kinova的7軸力控機械臂Gen3的智能控制系統。這項創新性技術通過人工智能算法&#xff0c;實現了人類手臂動作到機械臂運動的精準映射&am…

P5535 【XR-3】小道消息

題目描述 小 X 想探究小道消息傳播的速度有多快&#xff0c;于是他做了一個社會實驗。 有 n 個人&#xff0c;其中第 i 個人的衣服上有一個數 i1。小 X 發現了一個規律&#xff1a;當一個衣服上的數為 i 的人在某一天知道了一條信息&#xff0c;他會在第二天把這條信息告訴衣…

ChatGPT Agent架構深度解析:OpenAI如何構建統一智能體系統

引言&#xff1a;AI智能體的范式躍遷 2025年7月17日&#xff0c;OpenAI發布的ChatGPT Agent標志著對話式AI從“被動應答”向主動執行的歷史性轉變。這款融合Operator網頁操作與Deep Research信息分析能力的新型智能體&#xff0c;通過統一架構設計實現了復雜任務的端到端自主執…

計算機網絡(第八版)— 第2章課后習題參考答案

2-01 物理層要解決哪些問題&#xff1f;物理層的主要特點是什么&#xff1f;答&#xff1a;物理層要解決的主要問題&#xff1a;&#xff08;1&#xff09;物理層要盡可能地屏蔽掉物理設備和傳輸媒體&#xff0c;通信手段的不同&#xff0c;使數據鏈路層感覺不到這些差異&#…

Hive【Hive架構及工作原理】

?博客主頁&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客內容》&#xff1a;.NET、Java.測試開發、Python、Android、Go、Node、Android前端小程序等相關領域知識 &#x1f4e2;博客專欄&#xff1a; https://blog.csdn.net/m0_63815035/cat…

數據管理能力成熟度評估模型(DCMM)詳解

數據管理能力成熟度評估模型(DCMM)詳解 1. DCMM概述 數據管理能力成熟度評估模型(Data Management Capability Maturity Assessment Model, DCMM)是我國首個數據管理領域的國家標準(GB/T 36073-2018)&#xff0c;由國家工業信息安全發展研究中心牽頭制定。該模型為我國企業數據…

學習C++、QT---34(使用QT庫實現串口調試助手01:解決串口調試助手的UI)

&#x1f31f; 嗨&#xff0c;我是熱愛嵌入式的濤濤同學&#xff01;每日一言別害怕改變&#xff0c;走出舒適圈才能遇見更好的自己。串口調試助手項目好的現在我們來學習串口調試助手的項目&#xff0c;我們依舊是項目引領學習好的我們最后就是要做成一個類似我們市面上的串口…

Dockerfile 文件及指令詳解

什么是Dockerfile 文件Dockerfile 文件是用于構建 docker 鏡像的腳本文件&#xff0c;由一系列的指令構成。通過 docker build 命令構建鏡像時&#xff0c;Dockerfile 文件中的指令會由上到下執行&#xff0c;每條 指令都將會構建出一個鏡像層&#xff0c;這就是鏡像的分層。因…

主流Java Redis客戶端對決:Jedis、Lettuce與Redisson性能特性深度評測

&#x1f49d;&#x1f49d;&#x1f49d;歡迎蒞臨我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 持續學習&#xff0c;不斷…

刷題日記0725

今日計劃5道。2/5晚上被一些事影響了心神不寧&#xff0c;再加上感覺睡前做完時間有點緊&#xff0c;逃避的念頭出現了。代碼意思不進腦子了。做一道是一道。21. 合并兩個有序鏈表默認構造??&#xff1a;用于創建??值為0的孤立節點??&#xff08;不連接其他節點&#xff…

從數據脫敏到SHAP解釋:用Streamlit+XGBoost構建可復現的川崎病診斷系統

基于機器學習的川崎病輔助診斷工具&#xff0c;結合了數據預處理、模型訓練、特征解釋和交互式可視化。以下是深度解讀&#xff1a;1. 技術架構框架&#xff1a;使用 Streamlit 構建 Web 應用&#xff0c;適合快速開發交互式數據科學應用。核心算法&#xff1a;XGBoost&#xf…

【C++詳解】模板進階 非類型模板參數,函數模板特化,類模板全特化、偏特化,模板分離編譯

文章目錄一、非類型模板參數應用場景二、模板的特化函數模板特化類模板特化全特化偏特化三、模板分離編譯解決方法四、模板總結一、非類型模板參數 先前介紹的函數模板和類模板都是針對類型的類模板參數&#xff0c;非類型模板參數有哪些使用場景呢&#xff1f;我們先來看下面這…

10BASE-T1S核心機制——PLCA參數詳解

導語&#xff1a; PLCA是10BASE-T1S的核心機制&#xff0c;了解PLCA才能更好地使用10BASE-T1。 本文將通過介紹具體配置&#xff0c;以及實戰例子&#xff0c;帶你掌握PLCA。 以下測試內容使用KUNHONG-U10BT1S-EVB設備測試&#xff0c; 設備符合IEEE 802.3cg標準&#xff0…

uniapp vue apk那邊輸入法遮擋頁面內容

解決辦法&#xff1a;pages.json配置如下{"globalStyle": {"app-plus": {"softinputMode": "adjustResize"}} }效果&#xff1a; 鍵盤彈出時自動調整窗口大小&#xff0c;所有內容上推&#xff08;兼容性最佳&#xff09;文件內容如下…

2507C++,系統服務0與1

原文 窗口上的系統調用通過,每個由系統調用(x64)或sysenter(x86)CPU指令調用的NTDLL.dll,如NTDLL的NtCreateFile的以下輸出所示: 這里 0:000> u ntdll!NtCreateFile: 00007ffcc07fcb50 4c8bd1 mov r10,rcx 00007ffcc07fcb53 b855000000 mov eax,55h…

人工智能冗余:大語言模型為何有時表現不佳(以及我們能做些什么)

像 GPT - 4 這樣的大語言模型&#xff08;LLMs&#xff09;徹底改變了我們與技術交互的方式。它們可以撰寫文章、生成代碼、回答問題&#xff0c;甚至幫助我們構思創意。但任何花時間使用過這些模型的人都知道&#xff0c;它們的輸出有時會讓人感覺……不太對勁。表述冗長、格式…

Cursor替代品亞馬遜出品Kiro下載

Cursor替代品亞馬遜出品Kiro下載 支持Claude Sonnet4.0與3.7 點擊下載 備用鏈接&#xff1a;https://pan.xunlei.com/s/VOW-nBmVgR3ewIIAm7jDsf99A1?pwd6bqu#

MySQL 事務管理

一、前言 CURD 不加控制&#xff0c;會有什么問題&#xff1f; CURD 滿足什么屬性&#xff0c;能解決上述問題&#xff1f; 買票的過程得是原子的。買票應該不能受互相的影響。買完票應該要永久有效。買前和買后都要是確定的狀態。 什么是事務&#xff1f; 事務就是一組 DML 語…

yarn在macOS上的安裝與鏡像源配置:全方位指南

在前端開發領域&#xff0c;高效的包管理工具是提升開發效率的關鍵。yarn 作為一款由 Facebook 推出的包管理器&#xff0c;憑借其快速、可靠、安全的特性&#xff0c;逐漸成為眾多開發者的首選。對于 macOS 用戶而言&#xff0c;正確安裝 yarn 并合理配置鏡像源&#xff0c;能…