Android 常用布局及基本UI控件
一、Android學習API指南:【了解】
1. 應用的組成部分 App Components
1.1. 應用的基本原理 App Fundamentals
1.2. Activity Activities
1.2.1. 片段 Fragments
1.2.2. 加載器 Loaders
1.2.3. 任務和傳回堆 Tasks and Back Stack
1.3. Service服務 Services
1.3.1. 綁定服務 Bound Services
1.3.2. AIDL Android Interface Definition Language
1.4. 内容提供器 Content Providers
1.4.1. 内容提供器基礎 Content Providers Basics
1.4.2. 建立一個内容提供器 Creating a Content Provider
1.4.3. 月曆提供器 Calendar Provider
1.4.4. 通信錄提供器 Contact Provider
1.5. 意圖和意圖過濾器 Intents and Intents Filters
1.6. 程序和線程 Process and Threads
1.7. 權限系統 Permissions
1.8. 視窗小部件 App Widgets
1.9. Android清單 Android Manifest
2. 使用者界面 User Interface
2.1. 概述 Overview
2.2. 布局 Layout
2.2.1. 線形布局 Linear Layout
2.2.2. 相對布局 Relative Layout
2.2.3. 清單視圖 ListView
2.2.4. 網格視圖 GridView
2.3. 輸入控件 Input Controls
2.3.1. 按鈕 Buttons
2.3.2. 文本區域 Text Fields
2.3.3. 複選框 Checkboxes
2.3.4. 單選按鈕 Radio Buttons
2.3.5. 開關按鈕 Toggle Buttons
2.3.6. 下拉清單 Spinners
2.3.7. 選擇器 Pickers
2.4. 輸入事件 Input Events
2.5. 菜單 Menus
2.6. 動作條 Action Bar
2.7. 設定 Settings
2.8. 對話框 Dialogs
2.9. 狀态通知 Notifications
2.10. Toast通知 Toasts
2.11. 搜尋 Search
2.11.1. 建立一個搜尋界面 Creating a Search Interface
2.11.2. 增加目前搜尋提醒 Adding Recent Query Suggestions
2.11.3. 增加個性化提醒 Adding Custom Suggestions
2.11.4. 搜尋配置 Searchable Configuration
2.12. 拖放操作 Drag and Drop
2.13. 可通路性 Accessibility
2.13.1. 應用程式的可通路性 Making Applications Accessible
2.13.2. 建構可通路性服務 Building Accessibility Services
2.14. 風格和主題 Styles and Themes
2.15. 自定義控件 Custom Components
3. 應用程式資源 App Resources
3.1. 概述 Overview
3.2. 提供的資源 Providing Resources
3.3. 對資源的通路 Accessing Resources
3.4. 運作時變化的處理 Handling Runtime Changes
3.5. 本地化 Localization
3.6. 資源類型 Resource Types
3.6.1. 動畫 Animation
3.6.2. 狀态顔色清單 Color State List
3.6.3. 圖形處理類資源 Drawable
3.6.4. 布局 Layout
3.6.5. 菜單 Menu
3.6.6. 字元串 String
3.6.7. 樣式 Style
3.6.8. 其他類型 More Types
4. 動畫和圖形 Animation and Graphics
4.1. 概述 Overview
4.2. 屬性動畫 Property Animation
4.3. 補間動畫 View Animation
4.4. 幀動畫 Drawable Animation
4.5. 畫布和繪制 Canvas and Drawables
4.6. OpenGL OpenGL ES
4.7. 硬體加速 Hardware Acceleration
5. 高性能計算 Computation
5.1. RenderScript程式設計 RenderScript
5.2. RenderScript程式設計進階 Advanced RenderScript
5.3. 運作時API說明 Runtime API Reference
6. 多媒體和照相機 Media and Camera
6.1. 媒體播放 Media Playback
6.2. 支援的媒體格式 Supported Media Formats
6.3. 音頻捕獲 Audio Capture
6.4. JET引擎 JetPlayer
6.5. 照相機 Camera
7. 定位和傳感器 Location and Sensors
7.1. 定位和地圖 Location and Maps
7.2. 定位政策 Location Strategies
7.3. 傳感器概述 Sensors Overview
7.4. 手勢傳感器 Motion Sensors
7.5. 位置傳感器 Position Sensors
7.6. 環境傳感器 Environment Sensors
8. 通信 Connectivity
8.1. 藍牙 Bluetooth
8.2. NFC通信 NFC
8.2.1. NFC基礎 NFC Basics
8.2.2. NFC進階 Advanced NFC
8.3. Wi-FI直連 Wi-Fi 2P
8.4. USB通信 USB
8.4.1. 附件模式 Accessory
8.4.2. 主機模式 Host
8.5. SIP協定 SIP
9. 文本輸入法 Text and Input
9.1. 複制和粘貼 Copy and Input
9.2. 建立一個輸入法 Creating an IME
9.3. 拼寫檢查器 Spelling Checker
10. 資料存儲 Data Storage
10.1. 存儲選項 Storage Options
10.2. 資料備份 Data Backup
10.3. 應用程式安裝位置 App install Locaiton
11. 系統管理者 Administration
11.1. 硬體管理 Device Policies
12. web應用 Web Apps
12.1. 概述 Overview
12.2. web應用的螢幕适配 Targeting Screens from Web Apps
12.3. 利用webview建構web應用 Building Web Apps in WebView
12.4. 調試web應用 Debugging Web Apps
12.5. web應用的優化 Best Practices for Web Apps
13. 更好的政策
13.1. 一緻性(相容性) Compatibility
13.2. 支援多螢幕 Supporting Multiple Screens
13.2.1. 适配指定螢幕 Distributing to Specific Screens
13.2.2. 螢幕相容模式 Screen Compatibility Mode
13.3. 支援平闆和手機 Supporting Tablets and Handsets
14. Google提供的服務 Google Services
14.1. 應用程式内部付費機制
14.2. 應用程式内部付費機制概述
14.3. 如何使用應用程式付費服務
14.4. 訂閱機制
14.5. 安全與設計
14.6. 測試應用程式付費服務
14.7. 應用程式付費機制的管理
14.8. 應用程式付費的相關API
14.9. 應用程式許可機制
14.10. 許可機制概述
14.11. 設定許可機制
14.12. 在應用中增加許可
14.13. 許可機制API
14.14. Google軟體商店服務
14.15. 在Google Play中加過濾器
14.16. 多APK支援
14.17. 對APK附加檔案的服務
14.18. Google雲消息服務
14.19. 如何使用google雲服務
14.20. 架構概述
14.21. 示範教程
14.22. Google雲服務進階
14.23. 資訊遷移
二、布局的介紹:【了解】 1、在4.0以前版本中一共有五種布局,都是ViewGroup的子類。分别是AbsoluteLayout、RelativeLayout、LinearLayout、FrameLayout、TableLayout。而TableLayout是LinearLayout的子類。(中文分别是:絕對布局、相對布局、線性布局、幀布局、表格布局)。 2、在2.2作業系統中将AbsoluteLayout過期。而目前TableLayout也逐漸少用。 3、在4.0之後又新增 GridLayout。(GridLayout最經典的案例是電腦界面) 總之,Android中一共有 六種布局。目前推薦使用 RelativeLayout、 LinearLayout、 GridLayout三種布局。
三、View類的常用xml屬性: (一)、類結構: java.lang.Object ↳ android.view.View
(二)、View及其子元素常用屬性:(各種布局及控件的共同屬性)
- android:id
- android:background
- android:onClick 為該控件的單擊事件綁定監聽器
- android:padding 設定控件四周的填充區域
- android:visibility 設定該控件是否可見(invisible/visible/gone)
- android:alpha 設定該元件透明度(0-1之間的數值)
- android:layout_height 子元件的布局高度
- android:layout_width 子元件的布局寬度
- android:layout_margin 設定子元件的外邊距
四、LinearLayout:【掌握】 (一)、概念:線性布局控制其中的控件或元件橫向或縱向排列。線上性布局布局中,每一行或每一列隻能放單獨一個控件。線性布局不會換行。當控件排列到窗體邊緣,後面的控件就被隐藏,而不會顯示出來。 線性布局的預設方向是水準方向(Horizontal),還有一個選項是vertical。
(二)、 LinearLayout的常用 屬性: 1.android:orientation 定義布局内控件或元件的排列方式 可選項:vertical 、 horizontal
2.android:layout_width 定義控件的寬度 可選項:fill_parent / match_parent/ wrap_content/絕對數值 備注:fill_parent / match_parent的效果完全一緻,都是填充整個父控件。但是自2.2版本開始推薦使用match_parent 。wrap_content指的是該控件的寬度正好包裹内容物。
3.android:layout_height 定義控件的高度 可選項:fill_parent / match_parent/ wrap_content/絕對數值 備注:fill_parent / match_parent的效果完全一緻,都是高度填充整個父控件。wrap_content指的是該控件的高度正好包裹内容物。
4.android:id 設定控件的id。這樣就可以在R.java中自動生成相應的值,在程式中通過findViewById就可以調用。 設定id的格式為:android:id = "@+id/id的名字"
5.android:background 設定控件的背景顔色或背景圖檔 例如:android:background="#ffffff" android:background="@drawable/圖檔名稱" 【備注:】 顔色有RGB顔色格式和ARGB格式。RGB是紅綠藍三原色。而ARGB是帶alpha的三原色,即有透明度的三原色。 #FFFFFF 代表白色 #000000 黑色 #FFFFFFFF 完全不透明 #00FFFFFF 完全透明 #88FFFFFF 半透明
6.android:layout_weight 設定控件的權重。即各控件在水準或者垂直方向上平均配置設定。 備注:如果是水準方向設定權重,要将android:layout_width設定為0dp,如果是垂直方向上使用權重,要将android:layout_height設定為0dp。否則權重容易受到高度或寬度的幹擾而出現偏差。
7.android:gravity 該屬性用來控制該View的内容物的位置。 如果該屬性是定義在布局節點中,則該布局中所有控件的位置都受到這個屬性的控制。 如果該屬性出現在Button、TextView、EditText等控件中,則用來控制這些控件上的文字的位置。 可選項有:top、bottom、left、right、center_vertical、fill_vertical 、 center、fill等等。 【備注:】本屬性與android:layout_gravity不同。
8.android:layout_gravity 該屬性用于設定控件相對于容器的對齊方式。 可選項有:top、bottom、left、right、center_vertical、center_horizontal 、fill_vertical 、 center、fill等等。 這些可選項中不是适用于每一種布局。在垂直線性布局中,android:gravity為bottom不起作用;而水準線性布局中,android:gravity為right不起作用。 【備注:】而本屬性是android:layout_gravity屬性,與 android:gravity 屬性不同。
(三)、LinearLayout的特有屬性:【重新歸納:去除公共屬性後的 特有屬性】 1、android: orientation 布局管理器内元件的排列方式 2、android: gravity 設定布局管理器内元件的對齊方式 3、android: weightSum
(四)、 LinearLayout 子元素的特有屬性: 1、android: layout_weight 子元素在 LinearLayout 中所占的權重 2、android: layout_gravity 子元素在 LinearLayout 中的對齊方式
五、RelativeLayout:【掌握】 (一)、概念:指按着控件之間的相對位置來進行布局。
(二)、RelativeLayout特有屬性: 1、android: gravity 設定布局容器内子控件的對齊方式 2、android: ignoreGravity 設定布局管理器内哪個控件不受gravity屬性的影響
(三)、RelativeLayout子元素的特有屬性: LayoutParams A、第一組:指 兄弟控件之間的相對位置。該組屬性的值是另一個控件的id。
- layout_toRightOf 該控件在哪個控件的右側
- layout_toLeftOf 該控件在哪個控件的左側
- layout_above 該控件在哪個控件的上側
- layout_below 該控件在哪個控件的下側
B、第二組:指 兄弟控件之間的對齊關系。該組屬性的值是另一個控件的id。
- layout_alignRight 該控件與哪個控件的右對齊
- layout_alignLeft 該控件與哪個控件的左對齊
- layout_alignTop 該控件與哪個控件的頂對齊
- layout_alignBottom 該控件與哪個控件的底對齊
C、第三組:指 控件與父布局之間的對齊關系。該組屬性的值是true或者false。
- layout_alignParentRight 該控件與父布局控件的右對齊嗎?
- layout_alignParentLeft 該控件與父布局控件的左對齊嗎?
- layout_alignParentTop 該控件與父布局控件的頂端對齊嗎?
- layout_alignParentBottom 該控件與父布局控件的底部對齊嗎?
- layout_centerInParent 該控件位于父布局控件的中心位置嗎?
- layout_centerVertical 該控件位于父布局控件的垂直中心位置嗎?
- layout_centerHorizontal 該控件位于父布局控件的水準中心位置嗎?
六、GridLayout:網格布局 (一)、GridLayout布局屬性: 1、android:alignmentMode
屬性說明:設定布局的對齊模式。可以取以下值: alignBounds -- 對齊子視圖邊界。 alignMargins -- 對齊子視圖邊距。
2、android: columnCount
屬性說明:GridLayout的最大列數
3、android: rowCount
屬性說明:GridLayout的最大行數
4、android:orientation
屬性說明:GridLayout中子元素的布局方向。有以下取值: horizontal -- 水準布局。 vertical -- 豎直布局。
5、android:columnOrderPreserved
屬性說明: 設定該網格布局是否保留列序号。預設是true。
6、android:rowOrderPreserved
屬性說明: 設定該網格布局是否保留行序号。預設是true。
7、android:useDefaultMargins
屬性說明: 設定GridLayout使用預設的邊距。預設值是false。
(二)、GridLayout子元素的屬性: 1、android: layout_column
屬性說明: 顯示該控件的列。例如,android:layout_column="0",表示在第1列顯示該控件;android:layout_column="1",表示在第2列顯示該控件。
2、android: layout_row
屬性說明: 該控件所在行。例如,android:layout_row="0",表示在第1行顯示該控件;android:layout_row="1",表示在第2行顯示該控件。它和 android:layout_column類似。
3、android: layout_columnSpan
屬性說明: 列合并。即該控件所占的列數。例如,android:layout_columnSpan="2",表示該控件占2列。
4、android: layout_rowSpan
屬性說明: 行合并。即該控件所占的行數。例如,android:layout_rowSpan="2",表示該控件占2行。
5、android: layout_gravity
屬性說明:該控件的布局方式。選項值:
- top -- 控件置于容器頂部,不改變控件的大小。
- bottom -- 控件置于容器底部,不改變控件的大小。
- left -- 控件置于容器左邊,不改變控件的大小。
- right -- 控件置于容器右邊,不改變控件的大小。
- center_vertical -- 控件置于容器豎直方向中間,不改變控件的大小。
- fill_vertical -- 如果需要,則往豎直方向延伸該控件。
- center_horizontal -- 控件置于容器水準方向中間,不改變控件的大小。
- fill_horizontal -- 如果需要,則往水準方向延伸該控件。
- center -- 控件置于容器中間,不改變控件的大小。
- fill -- 如果需要,則往水準、豎直方向延伸該控件。
- clip_vertical -- 垂直剪切,剪切的方向基于該控件的top/bottom布局屬性。若該控件的gravity是豎直的:若它的gravity是top的話,則剪切該控件的底部;若該控件的gravity是bottom的,則剪切該控件的頂部。
- clip_horizontal -- 水準剪切,剪切的方向基于該控件的left/right布局屬性。若該控件的gravity是水準的:若它的gravity是left的話,則剪切該控件的右邊;若該控件的gravity是 right的,則剪切該控件的左邊。
- start -- 控件置于容器的起始處,不改變控件的大小。
- end -- 控件置于容器的結束處,不改變控件的大小。
七、Android UI控件及UI元件: (一)、控件名稱:【标紅色的為常用的】
- TextView 文本視圖
- EditText 文本編輯框
- Button 按鈕
- ImageView、Gallery 圖像視圖、畫廊(建議過期)
- ImageButton 圖檔按鈕
- ToggleButton 、Switch 開關按鈕、開關
- RadioButton 單選按鈕
- CheckBox 多選框
- Spinner 下拉清單
- AutoCompleteTextView 自動完成文本框
- ProgressBar 進度條
- SeekBar 拖動條
- RatingBar 星級評分條
- TimePicker、DatePicker 時間選擇器、日期選擇器
- AnalogClock、DigitalClock 模拟時鐘、數字時鐘
- Dialog(AlertDialog、ProgressDialog、TimePickerDialog、DatePickerDialog)提示對話框、進度對話框、時間選擇對話框、日期選擇對話框
- ListView、GridView 清單視圖【最重要的UI元件】、 網格視圖
- ScrollView 滾動視圖
- ExpandableListView 可展開清單視圖
- WebView 網頁視圖
- SearchView 搜尋框
- TabHost 書簽頁籤
- Notification 、Toast 通知 、 吐司(短時提醒)
- Menu(OptionMenu /SubMenu、ContextMenu) 菜單(選項菜單、上下文菜單)
- ImageSwitcher、TextSwitcher 、 ViewPager 圖像切換器、文本切換器
- ActionBar 動作導覽列
八、基本控件:——TextView: (一)、TextView類結構: java.lang.Object ↳ android.view.View ↳ android.widget.TextView

(二)、TextView 常用屬性: 1、andorid: text 設定文本的内容 2、 android: textColor 設定文本的顔色 3、 android: textSize 設定文本的字型大小(sp) 4、andorid:height 設定文本的高度,以像素為機關 5、 android:width 設定文本的寬度,以像素為機關 6、 android: inputType 設定文本的類型。例如是普通文本,還是email,password,數字等等。 7、 android:singleLine 設定文本是否是單行顯示。 8、android: gravity 設定文本框内文本的對齊方式。可選項有:top、bottom、left、right、center、fill、center_vertical、center_horizontal、fill_horizontal等等。這些屬性值也可以同時指定,各屬性值之間用豎線隔開。例如 right| bottom 9、android: drawableLeft 用于在文本框左側繪制圖檔。該屬性值通過“@drawable/圖檔檔案名”來設定。 10、android:drawableRight 用于在文本框左側繪制圖檔。該屬性值通過“@drawable/圖檔檔案名”來設定。 11、android:drawableTop 用于在文本框左側繪制圖檔。該屬性值通過“@drawable/圖檔檔案名”來設定。 12、android:drawableBottom 用于在文本框左側繪制圖檔。該屬性值通過“@drawable/圖檔檔案名”來設定。 13、android: autoLink 給指定的文本增加可單擊的超連結。可選項為:none、web、email、phone、map和all。 多個選項之間使用“|”分隔,也可以使用all。 14、android: hint 設定當文本框内文本内容為空時,預設顯示的提示性文字。
【補充:】 1、android:textAllCaps="true" 設定所有字母都大小 2、android:ellipsize="end" 文字過長,設定省略号。可選項:start , end ,middle,marquee
- android:ellipsize="start" 省略号在開頭
- android:ellipsize="middle" 省略号在中間
- android:ellipsize="end" 省略号在結尾
- android:ellipsize="marquee" 跑馬燈顯示
【備注:】要實作跑馬燈效果。要同時具有以下屬性。
- android:ellipsize="marquee"
- android:singleLine="true"
- android:focusable="true"
- android:focusableInTouchMode="true"
- android:marqueeRepeatLimit="marquee_forever"
九、基本控件:——EditText: (一)、 EditText 類結構: java.lang.Object ↳ android.view.View ↳ android.widget.TextView ↳ android.widget.EditText
是以 EditText 繼承了TextView的所有屬性。
(二)、android: inputType的可選項:
- android:inputType="textPersonName"
- android:inputType="textPassword"
- android:inputType="numberPassword" 隻可以輸入數字
- android:inputType="textEmailAddress"
- android:inputType="phone" 隻允許輸入數字,括号等特殊符号,不可以輸入字母。
- android:inputType="textPostalAddress"
- android:inputType="time"
- android:inputType="date"
- android:inputType="number"
十、基本控件:——Button: (一)、Button類結構: java.lang.Object ↳ android.view.View ↳ android.widget.TextView ↳ android.widget.Button
是以Button繼承了TextView的所有屬性。
【特别補充:】 sp、dp、dip、dpi 、 pt、px等機關的差別?【 重點】
- dpi dpi指像素密度。dots per inch ,即每英寸内像素點的個數。它不是表示長度的機關。
- 在android中認為:低(120dpi),中(160dpi),高(240dpi),超高(320dpi)。随着技術的增長,實際dpi已經超出這個定義。
- dip dimension independent pixels ,即與裝置無關的像素。目前這個機關已經被dp所取代,而不建議使用dip。
- dp 與dip的概念一樣。不過dp已經取代了dip。在Android中用來表示非文字大小的尺寸。例如:外邊距、内填充等。
- px = dp * (dpi / 160)
- 3.7寸螢幕,分辨率320*480手機上,正好1px = 1dp。
- sp scale independent pixel ,即與縮放比例無關的像素。在android中常用來表示文字大小。
- px 表示像素。因為同樣是200px,但是在不同手機下顯示的大小是不同的。
- pt point磅。1磅=1/74英寸
- xlarge 螢幕至少:960dp x 720dp
- large 螢幕至少 :640dp x 480dp
- normal 螢幕至少 :480dp x 320dp
- small 螢幕至少 :426dp x 320dp
- 總之:dp是用來定義非文字的尺寸,sp用來定義文字大小。px隻用于産生一條一像素的分割線時使用。
Google官方指定按照下列标準進行區分:
名稱 | 像素密度 |
---|---|
mdpi | 160dpi |
hdpi | 240dpi |
xhdpi | 320dpi |
xxhdpi | 480dpi |
xxxhdpi | 640dpi |
以圖示設計為例進行介紹
十一、當天作業: 1、用三種常用布局分别實作計算機的界面:
2、用布局實作使用者注冊的界面: