⑴ 【android】UI(二)Android常用的基礎布局容器
Android 的UI 可以分為兩類,一類叫做ViewGroup容器,一類叫做View視圖
View視圖:(TextView,Button,ImageView)都是常用常見的視圖.
ViewGroup容器:內部可以承載、放置、添加View視圖
線性布局就是 從左到右 或 從上到下 按 順序排列 的一種布局。下面講一講LinearLayout的基礎屬性。
相對布局在擺放子視圖位置時,按照 指定的參考系 來擺放子視圖的位置, 默認以屏幕左上角(0,0)位置 作為 參考系 擺放位置
使用layout_below使得後面一個組件位於前面一個組件的下方
配合layout_toRightOf使得後面一個組件位於前面一個組件的右方
組件的默認位置都是左上角,組件之間可以重疊。像千層餅一樣,一層壓著一層 可以設置上下左右的對齊、水平垂直居中、設置方式與線性布局相似
參考: 2021Android從零入門到實戰(Kotlin版)
⑵ Android UI設計的基本元素有哪些
移動端的App界面,不論是iOS還是Android ,一般都由四個元素組成,分別是:狀態欄(status bar)、導航欄(navigation)、主菜單欄(submenu)、內容區域(content)。
狀態欄:主要用於顯示信號、運營商、電量等手機狀態的區域;
導航欄:主要顯示當前界面的名稱,包含相應的功能或者頁面間的跳轉按鈕;
主菜單欄:類似於頁面的主菜單,提供整個應用的分類內容的快速跳轉;
內容區域:展示應用提供的相應內容;
需要注意的一點就是,由於Android在4.0之後移除了實體鍵而使用屏幕下方的虛擬鍵,所以,Android將iOS中的主菜單從下方移動到了上方,從而避免誤操作虛擬鍵。
說到這里,就不得不說,雖然android和iOS都是移動端的操作系統,但是他們在UI設計還是存在很大的差異性。這是為什麼呢? 其實這基本上都是因為iOS的閉源導致的,由於它的商業化,導致很多設計被申請了專利,Android在很多地方都必須有所不同,說的最多的就是iOS的彈性滾動,其實Android的ScrollView要實現這樣的效果,只需要修改一個參數的值即可,但是由於這個效果iOS申請的專利,所以Android就無法使用了。
⑶ Android UI | View 的繪制流程詳解
上一篇文章講解了,從setContentView方法到了解View是如何繪制的: 傳送門
在這篇博客講述了, 在ViewRootImpl類中performTraversals方法中具體的繪制過程,其中裡面就有 performMeasure()、performLayout()、performDraw() 三個方法的調用, 那麼要了解View 的測量、布局、繪制,就分別跟這三個方法有關系。
先來看看performMeasure()方法的調用過程
先看performMeasure方法,這個方法有兩個參數,都是通過getRootMeasureSpec()方法計算得到
這里有一個關鍵類MeasureSpec,在這里需要了解下這個類的原理。
這里要感謝 這位博主 ,他講述的很清晰,我自己動手測算了,很容易理解。大概就是用一個數字通過高位記錄Mode,地位記錄size的方式,記錄兩個數據,都是通過一個掩碼做位移運算得來。就是說這個變數(measureSpec)的值可以通過掩碼分別得到測量mode 和 測量size。
繼續查看performMeasure(childWidthMeasureSpec, childHeightMeasureSpec);方法:
這里mView是DecorView對象,那麼他調用的實際上是View的measure方法,查詢DecorView和FrameLayout都沒有measure方法,所以他調用的是View的measure方法
DecorView.onMeasure()方法如下:
FrameLayout.onMeasure方法如下:(這個方法裡面都很重要)
我們先看 , measureChildWithMargins 方法,
getChildMeasureSpec 方法內容如下:
那麼假如我們寫的布局根節點是LinearLayout,那麼就會在執行到View.measure方法裡面的onMeasure方法時,就會調用到LinearLayout.onMeasure方法,具體內容如下:
通過源碼可以看到,還是會循環調用子View , 就這樣循環遞歸的測量完最裡面的一個view,這個過程中onMeasure方法可能會被多次執行。
還是從ViewRootImpl.performTraversals開始
這里跟measure 調用流程其實一樣,DecorView和FrameLayout沒有重寫layout方法,所以調用的是View.layout方法,
由於當前對象是decorView,所以調用的是DecorView.onLayout方法:
FrameLayout.onLayout 方法如下:
繼續查看 View.draw方法
在這個方法裡面,所有重要的方法都在裡面,onDraw、dispatchDraw 等等都在裡面,我看了下這個方法裡面都挺重要就沒刪減,也都能看得懂。
到此View的整個繪制流程就搞清楚了。
關於子view測量
1、不管父View是何模式,若子View有確切數值,則子View大小就是其本身大小,且mode是EXACTLY
2、若子View是match_parent,則模式與父View相同,且大小同父View(若父View是UNSPECIFIED,則子View大小為0)
3、若子View是wrap_content,則模式是AT_MOST,大小同父View,表示不可超過父View大小(若父View是UNSPECIFIED,則子View大小為0)
關於繪制流程
我們自定義的view,基本上只需要重寫 onMeasure、onLayout、onDraw即可
⑷ Android UI規范是什麼
從事UI設計行業的朋友都知道,每一張設計稿都是有規范尺寸的,並且IOS的和Android還不同,IOS UI設計規范為375*667 1x的尺寸,那麼Android UI規范是什麼呢,下面讓我們一起來了解一下。
在做Android UI設計的時候,畫布的尺寸我們一般都是選擇360*640 1x,也就是說是選擇720*1280這個尺寸。
我們從上到下來進行了解,最上邊的是狀態欄,狀態欄的高度是25。
在狀態欄中肯定就是信號、電源以及時間這些了,每個Android定製系統的擺放樣式都不同,這一點不用糾結。
狀態欄下邊就是導航欄了,導航欄起到的是導航作用,高度是45px。
導航欄中間一般都是有文字來起到提醒作用的,導航文字的大小一般都是18px。
在最下方就是我們的標簽欄了,標簽欄的作用就是給用戶提供切換界面的作用,標簽欄的高度為50px。
在標簽欄中擺放的肯定就是我們的ICON圖標了,要注意,圖標的切圖點擊區域不能夠小於24px。
一些ICON圖標的下方還會有文本,這里文本的大小一般就是10或者是11px了,因為范圍有限。
本文尺寸均為1x。
⑸ 安卓手機里的系統UI是啥
這都是因為 Android 的開放性,Android 聯盟對全世界開放了它的全部代碼,並且有一個專業團隊維護更新,這些代碼不但是免費使用的,而且允許你在它原來的基礎的上進行一些改動。因此,很多手機生產商便會根據自己的企業文化和市場需求,在原生Android上再做修改和開發,從而讓自己的生產的手機在市場上和和其他品牌的手機有所區別。手機廠商基於Android 系統再定製的系統,一般情況下是不對外開放的源代碼的,屬於自有知識產權。
這些基於Android系統再定製的系統我一般稱之為深度定製的Android用戶界面(即User Interface),也就是業界常說的用戶UI,簡稱UI。
市場上常見的幾種 Android 定製化UI系統主要有 HTC 的 HTC Sense、摩托羅拉的 MotoBlur、索尼愛立信的 Nexus UI、三星 TouchWiz、魅族M9的定製UI、小米的MIUI 以及少數搭載 Android 原生系統的手機。
⑹ android的ui布局有哪些
布局(Layout)的概念是針對Activity的,Activity就是布滿整 個Android設備的窗口或者懸浮於其他窗口上的交互界面。在一個應用程序中通常由多個Activity構成,每個需要顯示的Activity都需要在AndroidManifest.xml文件之中聲明。
通常情況下,開發人員可以使用兩種方式來創建UI組件,一種方式是使用XML方式來配置UI組件的相關屬性,然後裝載這些UI組件,這也是最常用的方式。但是有些特殊情況下,需要動態生成UI組件,則需要使用第二種方式,完全使用java代碼來創建UI組件。
XML布局文件是Android系統中定義的Layout的常用方式,所有布局文件必須包含在res/layout目錄中,且必須符合Java的命名 規范。當在res/layout目錄下新增了布局文件之後,R.java文件會自動收錄該布局資源,Java代碼可通過setContentView方法 在Activity中顯示該Layout。
setContentView(R.layout.<資源名稱>);
在布局文件中可以指定UI組件的android:id屬性,該屬性的屬性值代表該組件的唯一標識。通過Activity.findViewById()訪問,並且findViewById()必須在setContentView載入xml文件之後使用,否則會拋出異常。
findViewById(R.id.)
Android應用的絕大部分UI組件都放在android.widget包及其子包、android.view包及其子包中,Android應用的 所有UI組件都繼承了View類。View類還有一個重要的子類:ViewGroup,ViewGroup類是所有布局管理器的父類。
ViewGroup容器控制其子組件的分布依賴於ViewGroup.LayoutParams、ViewGroup.MarginLayoutParams兩個內部類。
ViewGroup.LayoutParams提供兩個XML屬性設定組件的大小。
android:layout_height:指定該子組件的基本高度;
android:layout_width:指定該子組件的基本寬度。
這兩個屬性有三個基本值,這兩個屬性有三個特定的值:
fill_parent:指定組件的高度、寬度與父容器組件的一樣。
match_parent:與fill_parent一樣,Android2.2開始推薦使用。
warp_content:內容包裹。
ViewGroup.MarginLayoutParams用於控制子組件周圍的頁邊距。
android:layout_marginBottom(下邊距);
android:layout_marginLeft(左邊距);
android:layout_marginRight(右邊距):
layout_marginTop(上邊距)
對於View的尺寸,android提供了三種單位供選擇使用:
px:像素。
dp:dpi,表示屏幕實際的像素。
sp:與scale無關的像素,與dp類似。
尺寸單位選擇的技巧:如果設置長度、高度等屬性時可以使用dp或sp,但是如果設置字體,需要使用px。如果使用dp或sp,系統會根據屏幕密度的變化進行轉換。
為了適應各種界面風格,Android提供了五種布局規范,利用這五種布局,基本上可以在設備上隨心所欲的擺放任何UI組件,這五種布局分別是:
FrameLayout(幀布局)。
LinearLayout(線性布局)
RelativeLayout(相對布局)。
TableLayout(表格布局)。
AbsoluteLayout(絕對布局)。
線性布局(LinearLayout)
LinearLayout是最常用的布局方式,在XML文件中使用標記。它會將容器里的UI組件一個一個挨著排列起來。但是LinearLayout不會換行,當UI組件超出屏幕之後,則不會被顯示出來。LinearLayout有兩個重要的XML屬性:androidgravity(對齊方 式);android:orientation(排列方式)。
android:orientation(排列方式),設定了LinearLayout中包含的UI組件的排列方式,有兩個選項vertical(豎向)、horizontal(橫向,默認值)
android:gravity(對齊方式),設定LinearLayout中包含UI組件的對齊方式,其選項很多,常用上(top)、下(bottom)、左(left)、右(right)。
⑺ Android系統的ui是什麼意思
UI及用戶界面,就是所有你能看到的界面
activity
顯示界面(就是UI)(顯示的界面都是繼承activity完成的)
service
服務(UI的後台)(後台運行的,可以理解為沒有界面的activity)
Broadcast
Receiver
廣播(做廣播,通知時候用到)
Content
Provider
數據通信(數據之間通信,同個程序間數據,或者是不同程序間通信)
⑻ android ui是什麼
谷歌手機平台Android開發的ui。
UI及用戶界面,就是所有你能看到的界面
activity 顯示界面(就是UI)(顯示的界面都是繼承activity完成的)
service 服務(UI的後台)(後台運行的,可以理解為沒有界面的activity)
Broadcast Receiver 廣播(做廣播,通知時候用到)
Content Provider 數據通信(數據之間通信,同個程序間數據,或者是不同程序間通信)