Android基礎02-常用布局及基本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只用于產生一條一像素的分割線時使用。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。