android界面繪制
❶ 關於Android布局你不知道的
Android常見的5個布局,我想大家一定不會陌生。LinearLayout、RelativeLayout和FrameLayout也是使用頻率較高的布局方式,做Android開發的一定使用過。
傳統的5種布局方式:
不過我的問題並不是問面試者如何使用這些基礎的布局,而是要看面試者怎麼解決布局嵌套(影響性能)和屏幕適配問題。
我們都清楚Android界面的布局太復雜,嵌套層次過深,會使整個界面的測量、布局和繪制變得更復雜,對性能會造成影響。所以我們在寫Layout文件時,也要盡量避免布局的嵌套層次過深的問題。
在怎麼解決問題之前,我們得有一個好方法先判斷當前的問題情況。Android SDK工具箱中有一個叫做Hierarchy Viewer的工具,能夠在App運行時分析Layout。
注意: 在ROOT的手機,或者是安裝開發版的ROM的手機可以直接使用Hierarchy Viewer。如果沒有Root的手機(SDK 4.1及以上),需要在你的PC端添加一個環境變數「ANDROID_HVPROTO=ddm」。
下面列舉一些面試者常使用的方式。
merge merge標簽的作用是合並UI布局,使用該標簽能降低UI布局的嵌套層次。
merge標簽可用於兩種情況:
ViewStub ViewStub標簽引入的布局默認不會inflate,既不會顯示也不會佔用位置。 ViewStub常用來引入那些默認不會顯示,只在特殊情況下顯示的布局,如數據載入進度布局、出錯提示布局等。
需要在使用時手動inflate:
ViewStub在一定的程度可以起到減少嵌套層次的作用,特別是很多時候我們的程序可能不需要走到ViewStub的界面。
include 將可復用的組件抽取出來並通過include標簽使用,但<include>標簽能減少布局的層次嗎?
我認為不能。include主要解決的是相同布局的復用問題,它並不能減少布局的層次。
用RelativeLayout代替LinearLayout
很多人為了減少布局層次喜歡用RelativeLayout代替LinearLayout,不過可能達到的效果並不會很明顯。層次是減少了,但本身RelativeLayout就會比LinearLayout性能差一點。
有一些界面,比如一個圖片和一個文本的布局(ListItem常見的布局方式),可以利用TextView有drawableLeft, drawableRight等屬性,完全不需要RelativeLayout或者LinearLayout布局。
傳統的布局方式存在一定的缺陷,如RelativeLayout要兩次測量(measure)它的子View才能知道確切的高度;如果LinearLayout布局的子View有設置了layout_weight,那麼它也需要測量兩次才能獲得布局的高度。
相對於傳統的布局方式,Android官方還推出了兩種新的布局方式:ConstraintLayout和FlexboxLayout。
ConstraintLayout ConstraintLayout即約束布局,在2016年由Google I/O推出。ConstraintLayout和RelativeLayout有點類似,控制項之間根據依賴關系而存在,但比RelativeLayout更加靈活。創建大型復雜的布局仍然可以使用扁平的層級(不用嵌套View Group),說的簡單些就是,再復雜的界面也可以只有2層層次。
要使用ConstraintLayout需要在build.gradle中添加相關的support庫:
使用ConstraintLayout可以有效的解決布局嵌套過多導致的性能問題,官方也對其渲染性能進行了優化,並且ConstraintLayout支持可視化的方式編寫布局。
不過學會熟練使用ConstraintLayout會需要一點時間,但這是值得的。
FlexBoxLayout 做過前端開發(CSS方面)的同學對FlexBox一定不會陌生,最近我在做微信小程序開發時也涉及到FlexBox。FlexBox(彈性布局)是w3c在2009年提出的一種新的布局方案,解決以前那種傳統css的盒模型的局限性。
Google開源了FlexboxLayout布局和前端CSS FlexBox布局具有相同的功能(肯定有不一樣的地方),但已經足夠在Android上改進布局的構建方式。
FlexBoxLayout可以理解成一種更高級的LinearLayout,不過比LinearLayout更加強大和靈活。如果我們使用LinearLayout布局的話,那麼不同的解析度,也許我們要重新調整布局,勢必會需要跟多的布局文件放在不同的資源目錄。而使用FlexBoxLayout來布局的話,它可以適應各種界面的改變(所以叫響應式布局)。
如果對前端的Flexbox不太了解的話,你還需要補一些概念,好在這些東西在網上很容易找到。
可能很多讀者會覺這樣的面試題是吹毛求疵,很多項目中哪有這么復雜的界面,根本就用不到這些優化措施。
可以說厲害的人,或者叫高手,可能只是比較多在意這些細節而已。在實踐中的經歷告訴我,很多難於解決的性能問題,並不是因為有一個影響性能的問題無法攻克,而是沒有一個明顯的制約因素,是有各種小問題一點一點堆積起來,最終積重難返。
所以,把細節做好,或者意識到細節的地方可能引發的問題,對我們解決問題是很有幫助的,不要浪費了讓你可以成長的細節。
有需要更多Android高級進階和面試資料的朋友可以私信我獲取
❷ Android - View 繪制流程
我們知道,在 Android 中,View 繪制主要包含 3 大流程:
Android 中,主要有兩種視圖: View 和 ViewGroup ,其中:
雖然 ViewGroup 繼承於 View ,但是在 View 繪制三大流程中,某些流程需要區分 View 和 ViewGroup ,它們之間的操作並不完全相同,比如:
對 View 進行測量,主要包含兩個步驟:
對於第一個步驟,即求取 View 的 MeasureSpec ,首先我們來看下 MeasureSpec 的源碼定義:
MeasureSpec 是 View 的一個公有靜態內部類,它是一個 32 位的 int 值,高 2 位表示 SpecMode(測量模式),低 30 位表示 SpecSize(測量尺寸/測量大小)。
MeasureSpec 將兩個數據打包到一個 int 值上,可以減少對象內存分配,並且其提供了相應的工具方法可以很方便地讓我們從一個 int 值中抽取出 View 的 SpecMode 和 SpecSize。
一個 MeasureSpec 表達的是:該 View 在該種測量模式(SpecMode)下對應的測量尺寸(SpecSize)。其中,SpecMode 有三種類型:
對 View 進行測量,最關鍵的一步就是計算得到 View 的 MeasureSpec ,子View 在創建時,可以指定不同的 LayoutParams (布局參數), LayoutParams 的源碼主要內容如下所示:
其中:
LayoutParams 會受到父容器的 MeasureSpec 的影響,測量過程會依據兩者之間的相互約束最終生成子View 的 MeasureSpec ,完成 View 的測量規格。
簡而言之,View 的 MeasureSpec 受自身的 LayoutParams 和父容器的 MeasureSpec 共同決定( DecorView 的 MeasureSpec 是由自身的 LayoutParams 和屏幕尺寸共同決定,參考後文)。也因此,如果要求取子View 的 MeasureSpec ,那麼首先就需要知道父容器的 MeasureSpec ,層層逆推而上,即最終就是需要知道頂層View(即 DecorView )的 MeasureSpec ,這樣才能一層層傳遞下來,這整個過程需要結合 Activity 的啟動過程進行分析。
我們知道,在 Android 中, Activity 是作為視圖組件存在,主要就是在手機上顯示視圖界面,可以供用戶操作, Activity 就是 Andorid 中與用戶直接交互最多的系統組件。
Activity 的基本視圖層次結構如下所示:
Activity 中,實際承載視圖的組件是 Window (更具體來說為 PhoneWindow ),頂層View 是 DecorView ,它是一個 FrameLayout , DecorView 內部是一個 LinearLayout ,該 LinearLayout 由兩部分組成(不同 Android 版本或主題稍有差異): TitleView 和 ContentView ,其中, TitleView 就是標題欄,也就是我們常說的 TitleBar 或 ActionBar , ContentView 就是內容欄,它也是一個 FrameLayout ,主要用於承載我們的自定義根布局,即當我們調用 setContentView(...) 時,其實就是把我們自定義的布局設置到該 ContentView 中。
當 Activity 啟動完成後,最終就會渲染出上述層次結構的視圖。
因此,如果我們要求取得到子View 的 MeasureSpec ,那麼第一步就是求取得到頂層View(即 DecorView )的 MeasureSpec 。大致過程如下所示:
經過上述步驟求取得到 View 的 MeasureSpec 後,接下來就可以真正對 View 進行測量,求取 View 的最終測量寬/高:
Android 內部對視圖進行測量的過程是由 View#measure(int, int) 方法負責的,但是對於 View 和 ViewGroup ,其具體測量過程有所差異。
因此,對於測量過程,我們分別對 View 和 ViewGroup 進行分析:
綜上,無論是對 View 的測量還是 ViewGroup 的測量,都是由 View#measure(int widthMeasureSpec, int heightMeasureSpec) 方法負責,然後真正執行 View 測量的是 View 的 onMeasure(int widthMeasureSpec, int heightMeasureSpec) 方法。
具體來說, View 直接在 onMeasure(...) 中測量並設置自己的最終測量寬/高。在默認測量情況下, View 的測量寬/高由其父容器的 MeasureSpec 和自身的 LayoutParams 共同決定,當 View 自身的測量模式為 LayoutParams.UNSPECIFIED 時,其測量寬/高為 android:minWidth / android:minHeight 和其背景寬/高之間的較大值,其餘情況皆為自身 MeasureSpec 指定的測量尺寸。
而對於 ViewGroup 來說,由於布局特性的豐富性,只能自己手動覆寫 onMeasure(...) 方法,實現自定義測量過程,但是總的思想都是先測量 子View 大小,最終才能確定自己的測量大小。
當確定了 View 的測量大小後,接下來就可以來確定 View 的布局位置了,也即將 View 放置到屏幕具體哪個位置。
View 的布局過程由 View#layout(...) 負責,其源碼如下:
View#layout(...) 主要就做了兩件事:
ViewGroup 的布局流程由 ViewGroup#layout(...) 負責,其源碼如下:
可以看到, ViewGroup#layout(...) 最終也是通過 View#layout(...) 完成自身的布局過程,一個注意的點是, ViewGroup#layout(...) 是一個 final 方法,因此子類無法覆寫該方法,主要是 ViewGroup#layout(...) 方法內部對子視圖動畫效果進行了相關設置。
由於 ViewGroup#layout(...) 內部最終調用的還是 View#layout(...) ,因此, ViewGroup#onLayout(...) 就會得到回調,用於處理 子View 的布局放置,其源碼如下:
由於不同的 ViewGroup ,其布局特性不同,因此 ViewGroup#onLayout(...) 是一個抽象方法,交由 ViewGroup 子類依據自己的布局特性,擺放其 子View 的位置。
當 View 的測量大小,布局位置都確定後,就可以最終將該 View 繪制到屏幕上了。
View 的繪制過程由 View#draw(...) 方法負責,其源碼如下:
其實注釋已經寫的很清楚了, View#draw(...) 主要做了以下 6 件事:
我們知道,在 Activity 啟動過程中,會調用到 ActivityThread.handleResumeActivity(...) ,該方法就是 View 視圖繪制的起始之處:
可以看到, ActivityThread.handleResumeActivity(...) 主要就是獲取到當前 Activity 綁定的 ViewManager ,最後調用 ViewManager.addView(...) 方法將 DecorView 設置到 PhoneWindow 上,也即設置到當前 Activity 上。 ViewManager 是一個介面, WindowManager 繼承 ViewManager ,而 WindowManagerImpl 實現了介面 WindowManager ,此處的 ViewManager.addView(...) 實際上調用的是 WindowManagerImpl.addView(...) ,源碼如下所示:
WindowManagerImpl.addView(...) 內部轉發到 WindowManagerGlobal.addView(...) :
在 WindowManagerGlobal.addView(...) 內部,會創建一個 ViewRootImpl 實例,然後調用 ViewRootImpl.setView(...) 將 ViewRootImpl 與 DecorView 關聯到一起:
ViewRootImpl.setView(...) 內部首先關聯了傳遞過來的 DecorView (通過屬性 mView 指向 DecorView 即可建立關聯),然後最終調用 requestLayout() ,而 requestLayout() 內部又會調用方法 scheleTraversals() :
ViewRootImpl.scheleTraversals() 內部主要做了兩件事:
Choreographer.postCallback(...) 會申請一次 VSYNC 中斷信號,當 VSYNC 信號到達時,便會回調 Choreographer.doFrame(...) 方法,內部會觸發已經添加的回調任務, Choreographer 的回調任務有以下四種類型:
因此, ViewRootImpl.scheleTraversals(...) 內部通過 mChoreographer.postCallback(Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null) 發送的非同步視圖渲染消息就會得到回調,即回調 mTra
❸ android軟體開發android軟體開發教程第二版電子版
1、做安卓軟體開發需要哪些工具?2、Android手機軟體開發能做什麼?求解答檔絕坦3、Android軟體開發主要是學習什麼的?4、北大青鳥java培訓:Android軟體開發前景怎麼樣?5、安卓Android軟體開發用什麼語言?做安卓軟體開發需要哪些工具?
android是基於linux的,所以在ubuntu下是最好的。當然windows下面也是可以的。但是android的內核是基於linux的,並且通過終端進行各種操作,非常強大,也比cmd方便。
大致開發的環境是這樣:ubuntu系統,以前是windows然後安裝了ubuntu的虛擬機。android大部分的開發都是中間層到頂層的應用開發,所以基本上是java開發。
表配如下:1eclipse是開發java必備,也是android必備。(當然前提是先安裝JDK1.6)
2下載android的SDK和ADT。這是android的開發必須的工具,adb、ddms、mksdcard、aapt,debug 必備
A安裝完eclipse後,通過help=〉install new software把ADT安裝好
B然後window=preference設置好SDK的路徑即可
如果用到C開發的話,可以安裝一下CDT
現在可以通過AVD manager安裝一下自己想在哪個平台下的api,比如:android2.3.4,就可以建一個2.3.4的emulator,把模擬器跑起來。通過adb ddms 等工具察看、開發了。為了方便,把adb的路徑加到環境變數里。
Android手機行桐軟體開發能做什麼?求解答
Android手機軟體開發能做什麼?求解答
Android手機系統的一個很大的優勢在於其開放性和服務免費。Android是一個對第三方軟體完全開放的平台,開發者在為其開發程序時擁有更大的自由度,突破了iPhone等只能添加為數不多的固定軟體的枷鎖;同時與Windows Mobile、Symbian等廠商不同,Android操作系統免費向開發人員提供,這樣可節省近三成成本。 Android項目目前正在從手機運營商、手機廠商、開發者和消費者那裡獲得大力宏叢支持。從下面列出的開放手機聯盟成員可以看出其強大的實力: 開放手機聯盟成員: 一、手機製造商: 1、 諾基亞 2、 三星 3、 摩托羅拉 4、 HTC 5、 索尼愛立信 6、 RIM 7、 LG 8、 BlackBerry 9、 蘋果 10、 中興 二、半導體公司: 半導體: 1、 中芯國際 2、 台積電 3、 大連英特爾 4、 蘇州和艦 5、 宏力 6、 華虹 7、 華力 8、 成都德州儀器 9、 廈門集順 10、寧波比亞迪 三、:軟體公司 1、 華為技術有限公司 2、 中興通訊股份有限公司 3、 海爾集團公司 4、 神州數碼(中國)有限公司 5、 浙大網新科技股份有限公司 6、 熊貓電子集團有限公司 7、 北京北大方正集團公司 8、 同方股份有限公司 9、 上海貝爾阿爾卡特股份有限公司 10、 浪潮集團有限公司 Android同時也獲得了大量開發者的支持。據Google稱,在其推出後的兩個月內,程序員下載這個軟體開發平台的次數已經高達250000多次。盡管在如 此龐大的下載數量中只有一小部分開發者真正開始編寫實際的應用程序,但我們卻由此可以看出驚人的開發商興趣。相比之下,在Symbian操作系統推出一年 後,其操作指南的下載次數只有70000次左右。 HTC CEO周永明(Peter Chou)稱,基於Google Android平台的T-MobileG1手機有望在今年底達到100萬部的出貨量,而此前預計的數量只有60萬部。看起來「Google手機」盡管宣傳比較低調,但實際賣得還不錯,前景也被人看好。 Android在中國,你必須要了解的 作為開放手機聯盟的初始成員,中國移動早在去年就開始招兵買馬,開發自己的Android手機。另外,各山寨廠商也在大力進行Android的移植工作,更有所謂的首款中文Android手機琦基i6已經曝光。 廣州北大青鳥廣力校區院校地址: 廣州市越秀區童心路西勝街42號5號樓(廣州青少年科技館、廣州科學技術協會內)。
怎麼學習安卓Android手機軟體開發
Android應用呈現給用戶最多的是界面,所以界面是否美觀是用戶會不會選擇去用的一個重要因素。對於工程師來說,如何提高自己的審美,進而把自己對美的理解融入到應用當中是很重要的。如果你對安卓可發有興趣的話,可以來武漢四 維夢-工場了解學習
沒有基礎能學android手機軟體開發嗎?
沒基礎得先入門,編程這東西速成不行,得從java小程序做起,包括安裝jdk,jre這些,零基礎可以學習Java基礎開始,逐步向開發項目進階。最快的方法還是去參加android開發培訓,可以零基礎學,培訓四個月的時間就可以了。
誰告訴我下,android手機軟體開發,如何啊?
華夏博大3G學院,都反映挺好的,那裡的老師有這方面的開發經驗。
具備著線上的真實應用,就業了之後再付 款。
怎麼招聘一批android手機軟體開發的人呢?
個人理解是 對於需要做自己的android客戶端的企業來說 沒有必要非要要求這個客戶端一定要實現盈利~ 比如金蝶隨手記 它更大的作用就是提高品牌知名度和培養用戶習慣罷.
就好象adobe 為了培養用戶習慣和品牌知名度 故意在反盜版上面做得不是那麼好.
學android的手機軟體開發 怎麼樣
有前途,自學看這個:mars-droid./
我一直在看,有不懂得可以在論壇提問
手機軟體開發做功能需求時要注意什麼?天瑞地安的手機軟體開發怎麼樣?
一般是注意開發的水平能力怎麼樣, 有沒有成功案例, 開發的app後期發現BUG怎麼處理, 版本怎麼升級等等, 手機APP開發, 需要可以@我
金華有android手機軟體開發培訓的地方嗎?
"給大家講一個真實的故事吧,在經歷一場意外車禍後,我錯過了應屆生就業的最佳時期。因為一直期望能從事嵌入式行業,而該行的起點要求比較高,公司一般都不招應屆生,只取有工作經驗的職業人士或是有培訓經驗的基礎技術人員。所以在術後休養一年身體有所好轉的情況下,我選擇了動力節點或王勇java,這四個月的學習期間,我不僅鞏固了軟體開發的語言基礎部分,更彌補了大學課堂應試教育的不足之處。因為在培訓期間,雖然多半是視頻教學,但是,一邊聽課一邊敲代碼的學習模式,不僅加深了課堂理解而且強化了動手動腦的能力。在此,向動力節點或王勇java所有給過我幫助的老師和同學致以真切的謝意!Y
"
一、首先要載入JDBC驅動包。
步驟:右擊項目找到build path-configure build path-libraries——add External JARs添加驅動包
二、寫測試類:TestCon.java
(在此之前,首先
1.在自己的電腦上Mysql下確定賬戶是"root",密碼是"123456";
2.進入賬戶,創建資料庫cui;
3.在資料庫cui下面,創建表test1 包含_id(int 類型自動增加) username(String 類型)、password(String 類型);
4.在表中插入數據,以便顯示
)
1 package .test.an;
2
3 import java.sql.Connection;
4 import java.sql.DriverManager;
5 import java.sql.PreparedStatement;
6 import java.sql.ResultSet;
7 import java.sql.SQLException;
8
9
10 public class TestCon1{
11 public static void main(String[] args)
12 {
13 Connection con = null;
14 String sql;
15 PreparedStatement pre;
16 ResultSet rs;
17
18 try {
19 String driver=".mysql.jdbc.Driver";
20 Class.forName(driver);
21
22 String url="jdbc:mysql:localhost:3306/cuiuseUnicode=truecharacterEncoding=latin1";utf-8也行
23 con = DriverManager.getConnection(url, "root", "123456");
24
25 sql = "select _id,username,password from test1" ;
26 pre = con.prepareStatement(sql);
27
28 rs = pre.executeQuery();
29 while(rs.next()){
30 int id = rs.getInt(1);
31 String username = rs.getString(2);
32 String password = rs.getString(3);
33
34 System.out.println("id="+id+";username="+username+";password="+password);
35 }
36 con.close();
37 } catch (SQLException e) {
38 e.printStackTrace();
39 } catch (ClassNotFoundException e) {
40 e.printStackTrace();
41 }
42
43 }
44
45 }
運行結果:
id=1;username=c;password=123456
id=2;username=xxx;password=654321
id=3;username=ddd;password=123456
id=4;username=ddf÷;password=yyt
id=5;username=cuixiaodong;password=cxd
id=6;username=vv;password=cxd
手機軟體開發難學嗎
手機軟體開發,技術含量很高。 只有接受好的教育,有好的學習態度才會不難
Android軟體開發主要是學習什麼的?
近半年來android軟體開發,手機的安卓系統與ios系統是目前主流的手機系統,Android軟體開發主要是學習什麼的?IT培訓發現安卓開發的技術很多的,如果想一次性學好是不實際的,但下面這些基礎還是要學好的。
1、Activity生命周期
雖然Android中有四大組件,但是不可否認Activity是最常用的。所以熟練掌握Android的生命周期是必須的。其實生命周期就是記住Activity的那些方法在什麼時候被系統調用,這樣才可以把對應的邏輯代碼寫到合適的方法內部去。
至於服務和廣播組件可以稍微緩一下,到實際使用的時候再學習都可以。
2、界面開發技術
界面開發是一種基本的技術,幾乎所有的程序裡面都需要用到。在Android開發中界面開發分為3種:
1)使用xml文件布局
使用xml首先對於界面進行布局,然後在Activity裡面進行引用是最常見的應用軟體開發技術,這種方式使用的最大,需要學習的內容也最多。學習時需要熟悉:
a)五種Layout布局
深刻理解五種布局組織控制項的方式是一個基本的基礎,這樣你才可以在實際的界面中靈活的使用每種布局結構,構造出需要的界面。
b)常用控制項
控制項有很多,至少要知道每種控制項是做什麼的,至於裡面的特定參數和方法可以學要的時候再去查
c)界面美化
系統的控制項很多時候無法滿足要求,需要通過添加背景更換圖片等進行美化,要熟悉每種控制項如何去美化。
掌握android軟體開發了上面的內容,通過布局的嵌套就可以製作出各種界面,如果在熟悉include的使用就可以減少xml的重復,方便後期的修改和維護android軟體開發了。
2)使用代碼動態創建
有些時候需要動態的創建一些布局和控制項,這個就需要使用LayoutInflater去創建一些動態的界面了。
3)自己繪制界面
游戲中常用,繼承SurfaceView自己繪制。
3、數據存儲技術
Android中的數據存儲方式有3種:
1)SharedPrefereneces存儲
對於簡單的數據可以使用該方式存儲,以鍵值對的方式存儲一些基本的數據。
2)文件存儲
將數據以文件的形式存儲,可以是手機自身的存儲也可以是SD卡,文件的數據格式自己定義。
3)SQLite資料庫存儲
使用標准SQL語句進行操作,復雜數據的首選。
4、網路編程
現在的Android程序不需要聯網的已經不多了。所以網路編程也是必須的,一般的公司都會封裝有自己的聯網結構,但是基本的聯網還是要熟悉。
1)HTTP聯網
使用Http聯網+Json數據格式是現在很多客戶端的首選。
2)Socket聯網
至於藍牙等連接方式則可以在項目需要的時候學習。
對於手機的系統功能,如撥打電話、發送簡訊、讀取系統參數等則可以根據需要在學習,不麻煩的。
其次,手機軟體相關
Android開發不同於普通的電腦軟體開發,需要了解手機的操作習慣,知道手機的屏幕不大、內存有限,電池有限等,在實際開發和設計時盡量考慮。
北大青鳥java培訓:Android軟體開發前景怎麼樣?
Android軟體開發前景怎麼樣?在智能硬體橫行的現今社會,各種黑科技層出不窮,Android系統的不斷更新迭代,手機的不斷增產,使用的人也不斷在生長。
Android軟體開發前景怎麼樣?Android在現在發展的非常好,無論是八零後還是九零後對於安卓手機的喜愛也越來越多。
也帶動了很多關於Android產業的就業,為什麼Android會有如此大的魔力?其原因就是他的源碼開發,谷歌一直不斷在創新,更新自己的產品,保持這么久的生命力呢?在之前的數據顯示,Android就已經顯示出強大的優勢,兩年的時間里就超過了當時風頭正盛的塞班系統,成為最受歡迎的系統,佔領了大部分的手機市場。
Android的系統應用的面很廣,不僅僅單純是在手機上,而且還在平板電腦上也很有作為。
而且現在國產的手機都是採用Android系統,例如華為、中興、小米等等,更是加速了Android系統的發展,使它的用戶越來越多,關於Android的技術人員也受到企業的需要。
Android軟體開發前景怎麼樣市面上一般的培訓機構只針對其中的一種進行培訓,教授的知識面很窄。
有的只教你片面的知識,在公司企業里不能得到廣泛的應用,只能到公司里去大量二次學習,他們的工資也是一漲再漲,我們國家實在是太短缺這方面的人才了。
電腦培訓發現為了這個行業發展的更加迅速,無論是學校還是社會都需要貢獻自己的一份力量。
安卓Android軟體開發用什麼語言?
Android以Java為編程語言。
操作系統與應用程序的溝通橋梁,並用分為兩層:函數層(Library)和虛擬機(Virtual Machine)。 Bionic是 Android 改良libc的版本。
Android 同時包含了Webkit,所謂的Webkit 就是Apple Safari瀏覽器背後的引擎。Surface flinger 是就2D或3D的內容顯示到屏幕上。Android使用工具鏈(Toolchain)為Google自製的Bionic Libc。
Android採用OpenCORE作為基礎多媒體框架。OpenCORE可分7大塊:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。
(3)android界面繪制擴展閱讀:
安卓軟體開發學習內容
Android基礎階段:平台架構特性(JAVA/C) Market/應用程序組件 環境搭建與部署/打包與發布 AVD/DDMS/AAPT 調試與測試 相關資源訪問/資源製作 。
Activity/Service/Broadcast Receiver/Content Provider/原理(生命周期)及深層實現。
Android進階初級:組件Widget/ 菜單Menu/ 布局Layout 詳解 Xml解析(Pull/Dom/Sax)/JNI 解析SQL資料庫原理, SQLite /SharedPreferences/File詳解 多媒體Audio/Video/Camera 詳解。
Android進階高級:藍牙/WIFI SMS/MMS 應用實現 深層次解析GPS原理,實現。LocationManager/LocationProvider 進行定位/跟蹤/查找/趨近警告以及Geocoder正逆向編解碼等技術細節。
2D圖形庫(Graphics/View)詳解 SDCARD/感測器/手勢 應用實現。
❹ android開發問題: 在Activity主界面繪制畫布,可是它把整個窗口都覆蓋掉了,怎麼設定畫布的窗口大小呢(
你是說View占滿了整個屏幕嗎?這樣的話就只能在layout中寫一個布局文件,將View以一種組件的方式聲明到.xml文件中,然後你可以在它的上下中聲明其他的button或者textview或者ImageButton等。
❺ Android UI繪制之View繪制的工作原理
這是AndroidUI繪制流程分析的第二篇文章,主要分析界面中View是如何繪制到界面上的具體過程。
ViewRoot 對應於 ViewRootImpl 類,它是連接 WindowManager 和 DecorView 的紐帶,View的三大流程均是通過 ViewRoot 來完成的。在 ActivityThread 中,當 Activity 對象被創建完畢後,會將 DecorView 添加到 Window 中,同時會創建 ViewRootImpl 對象,並將 ViewRootImpl 對象和 DecorView 建立關聯。
measure 過程決定了 View 的寬/高, Measure 完成以後,可以通過 getMeasuredWidth 和 getMeasuredHeight 方法來獲取 View 測量後的寬/高,在幾乎所有的情況下,它等同於View的最終的寬/高,但是特殊情況除外。 Layout 過程決定了 View 的四個頂點的坐標和實際的寬/高,完成以後,可以通過 getTop、getBottom、getLeft 和 getRight 來拿到View的四個頂點的位置,可以通過 getWidth 和 getHeight 方法拿到View的最終寬/高。 Draw 過程決定了 View 的顯示,只有 draw 方法完成後 View 的內容才能呈現在屏幕上。
DecorView 作為頂級 View ,一般情況下,它內部會包含一個豎直方向的 LinearLayout ,在這個 LinearLayout 裡面有上下兩個部分,上面是標題欄,下面是內容欄。在Activity中,我們通過 setContentView 所設置的布局文件其實就是被加到內容欄中的,而內容欄id為 content 。可以通過下面方法得到 content:ViewGroup content = findViewById(R.android.id.content) 。通過 content.getChildAt(0) 可以得到設置的 view 。 DecorView 其實是一個 FrameLayout , View 層的事件都先經過 DecorView ,然後才傳遞給我們的 View 。
MeasureSpec 代表一個32位的int值,高2位代表 SpecMode ,低30位代表 SpecSize , SpecMode 是指測量模式,而 SpecSize 是指在某種測量模式下的規格大小。
SpecMode 有三類,如下所示:
UNSPECIFIED
EXACTLY
AT_MOST
LayoutParams需要和父容器一起才能決定View的MeasureSpec,從而進一步決定View的寬/高。
對於頂級View,即DecorView和普通View來說,MeasureSpec的轉換過程略有不同。對於DecorView,其MeasureSpec由窗口的尺寸和其自身的LayoutParams共同確定;
對於普通View,其MeasureSpec由父容器的MeasureSpec和自身的Layoutparams共同決定;
MeasureSpec一旦確定,onMeasure就可以確定View的測量寬/高。
小結一下
當子 View 的寬高採用 wrap_content 時,不管父容器的模式是精確模式還是最大模式,子 View 的模式總是最大模式+父容器的剩餘空間。
View 的工作流程主要是指 measure 、 layout 、 draw 三大流程,即測量、布局、繪制。其中 measure 確定 View 的測量寬/高, layout 確定 view 的最終寬/高和四個頂點的位置,而 draw 則將 View 繪制在屏幕上。
measure 過程要分情況,如果只是一個原始的 view ,則通過 measure 方法就完成了其測量過程,如果是一個 ViewGroup ,除了完成自己的測量過程外,還會遍歷調用所有子元素的 measure 方法,各個子元素再遞歸去執行這個流程。
如果是一個原始的 View,那麼通過 measure 方法就完成了測量過程,在 measure 方法中會去調用 View 的 onMeasure 方法,View 類裡面定義了 onMeasure 方法的默認實現:
先看一下 getSuggestedMinimumWidth 和 getSuggestedMinimumHeight 方法的源碼:
可以看到, getMinimumWidth 方法獲取的是 Drawable 的原始寬度。如果存在原始寬度(即滿足 intrinsicWidth > 0),那麼直接返回原始寬度即可;如果不存在原始寬度(即不滿足 intrinsicWidth > 0),那麼就返回 0。
接著看最重要的 getDefaultSize 方法:
如果 specMode 為 MeasureSpec.UNSPECIFIED 即未指定模式,那麼返回由方法參數傳遞過來的尺寸作為 View 的測量寬度和高度;
如果 specMode 不是 MeasureSpec.UNSPECIFIED 即是最大模式或者精確模式,那麼返回從 measureSpec 中取出的 specSize 作為 View 測量後的寬度和高度。
看一下剛才的表格:
當 specMode 為 EXACTLY 或者 AT_MOST 時,View 的布局參數為 wrap_content 或者 match_parent 時,給 View 的 specSize 都是 parentSize 。這會比建議的最小寬高要大。這是不符合我們的預期的。因為我們給 View 設置 wrap_content 是希望View的大小剛好可以包裹它的內容。
因此:
如果是一個 ViewGroup,除了完成自己的 measure 過程以外,還會遍歷去調用所有子元素的 measure 方法,各個子元素再遞歸去執行 measure 過程。
ViewGroup 並沒有重寫 View 的 onMeasure 方法,但是它提供了 measureChildren、measureChild、measureChildWithMargins 這幾個方法專門用於測量子元素。
如果是 View 的話,那麼在它的 layout 方法中就確定了自身的位置(具體來說是通過 setFrame 方法來設定 View 的四個頂點的位置,即初始化 mLeft , mRight , mTop , mBottom 這四個值), layout 過程就結束了。
如果是 ViewGroup 的話,那麼在它的 layout 方法中只是確定了 ViewGroup 自身的位置,要確定子元素的位置,就需要重寫 onLayout 方法;在 onLayout 方法中,會調用子元素的 layout 方法,子元素在它的 layout 方法中確定自己的位置,這樣一層一層地傳遞下去完成整個 View 樹的 layout 過程。
layout 方法的作用是確定 View 本身的位置,即設定 View 的四個頂點的位置,這樣就確定了 View 在父容器中的位置;
onLayout 方法的作用是父容器確定子元素的位置,這個方法在 View 中是空實現,因為 View 沒有子元素了,在 ViewGroup 中則進行抽象化,它的子類必須實現這個方法。
1.繪制背景( background.draw(canvas); );
2.繪制自己( onDraw );
3.繪制 children( dispatchDraw(canvas) );
4.繪制裝飾( onDrawScrollBars )。
dispatchDraw 方法的調用是在 onDraw 方法之後,也就是說,總是先繪制自己再繪制子 View 。
對於 View 類來說, dispatchDraw 方法是空實現的,對於 ViewGroup 類來說, dispatchDraw 方法是有具體實現的。
通過 dispatchDraw 來傳遞的。 dispatchDraw 會遍歷調用子元素的 draw 方法,如此 draw 事件就一層一層傳遞了下去。dispatchDraw 在 View 類中是空實現的,在 ViewGroup 類中是真正實現的。
如果一個 View 不需要繪制任何內容,那麼就設置這個標記為 true,系統會進行進一步的優化。
當創建的自定義控制項繼承於 ViewGroup 並且不具備繪制功能時,就可以開啟這個標記,便於系統進行後續的優化;當明確知道一個 ViewGroup 需要通過 onDraw 繪制內容時,需要關閉這個標記。
參考:《Android開發藝術探索》
❻ axure rp pro可以設計android界面嗎
沒有問題的,web,手機,erp,游戲等等都可以的
給你一個手機案例