api 27
annotations
viewdebug.exportedproperty : 在捕獲檢視時標記要轉儲的字段和方法。修飾方法時方法不能有引數,並返回有效的資料。
例如:view getcontext()
@viewdebug.capturedviewproperty
public final context getcontext()
viewdebug.exportedproperty : 此注釋可用於標記檢視伺服器將要轉儲的字段和方法。只有沒有引數的非空方法才能被注釋。
viewdebug.flagtostring : 定義從標誌到字串的對映。
viewdebug.inttostring : 定義從int值到字串的對映。
viewdebug :view檢視和view結構的除錯跟蹤工具。
其他註解:@focusable 、 @visibility 、@layoutdir ...
生存期都是retentionpolicy.source,@intdef規定取值範圍。用於規範物件的屬性值。
using views
視窗中的檢視都在乙個view樹里。我們可以通過**或者xml檔案新增檢視。
一旦建立檢視樹,常常需要做一些共同的操作:
1.設定屬性:比如 textview.settext(),或者通過xml設定。
2.設定焦點: 可以呼叫requestfous()。
3.設定監聽:...
4.設定visibility: setvisitity(int);
自定義view
繼承view,重寫裡面framework 呼叫的一些標準方法。
1.creation建立:
constructors 通過**建立或inflate乙個布局檔案時構造方法被呼叫,然後解析定義屬性值。
onfinishinflate() 當view 和他所有的子view從xml檔案中被inflated後被呼叫。
2.layout 布局:
onmeadsure(init,init) 呼叫,以確定此檢視及其所有子檢視的大小要求。
onlayout(boolean,int,int,int,int) 當父檢視為其所有子檢視分配大小和位置。
onsizechanged( int,int,int,int)當此view大小發生改變時呼叫。
3.drawing 繪製:
ondraw(canvas) 當view呈現內容時呼叫。
4.event processing 事件設定:
onkeydown(int,keyevent) key按下事件發生。
onkeyup(int ,keyevent)當key抬起事件發生。
ontrackballevent(motionevent)當跟蹤手勢事件發生時呼叫。
ontouchevent( motionevent ) 當有乙個手勢螢幕觸控的事件發生時呼叫。
5.focus 焦點:
onfocuschanged(boolean,int ,rect) 當view獲得或失去焦點時呼叫。
onwindowfouschanged(boolean) 當窗體包含的view獲取或失去焦點時呼叫。
6.attaching 附上:
onattachedtowindow() 當view附加到window窗體時呼叫。
ondetachedfromwindow() 當view檢視與其視窗分離時呼叫。
position 位置
view的形狀是矩形。每個view都有位置,由left 和 top ,width 和 height 決定。獲取方法getleft( ) 和 gettop( ) , getwidth( ) 和 getheight( ) 。left 與 top 當前view左上角相對於直接父布局左上角的畫素。
size大小,padding內邊距 和 margin外邊距
大小: width 和 height 。
第一種寬高:測量後的寬高,決定當前view期望在父體中有多大。測量後的寬高可以通過getmeasurewidth( ) 和 getmeasureheight( )獲得(必須在onmeasure( int,int ) 儲存寬高後才能有效呼叫)。
第二種寬高:在螢幕上實際繪製出的大小。可能與上面測量出的結果不同。可以通過getwidth()和 getheight( )獲得(必須在onlayout(...)之後才能有效呼叫)。
去測量他的尺寸,要計算view設定的內邊距,用於將view的內容偏移相應的畫素。 可以使用setpadding(int,int,int,int) 或 setpaddingrelative(int ,int ,int ,int)。查詢通過getpadding***()。
layout 布局
分為兩個步驟:
1. 測量階段measure(int,int)。從上到下遞迴整個view樹,父布局將規格傳遞到子布局,測量時每個view都setmeaureddimension()儲存測量值。
2. 布局階段layout( ... ) 。從上到下遞迴,傳遞過程中父級負責使用計算出的值定位其所有子節點。
測量時使用兩個類表示尺寸。
(1)view.measurespec 被用於告訴父級他們想被怎樣測量和定位。unspecified : 不確定的。ecxactly: 父級指定精確的值,子級都要符合這個值。at_most:父級經可能給與子級最大的尺寸。
(2)基類 layoutparams 僅描述他們的寬高期望有多大(an exact number , match_parent , wrap_content)。
啟動layout ,呼叫requestlayout( ) 。
drawing 繪製
父級在子級前面繪製,兄弟根據填充順序繪製。
view :1. 繪製背景;2. 如果必要,儲存畫布的圖層準備「褪色」;3. 繪製自身內容;4. 繪製子級;5. 如果必要,畫出「褪色」的邊界並恢復圖層;6. 繪製裝飾(scollerbar)。
viewgroup 的子級view可以通過setz()控制繪製順序。
控制view重新繪製呼叫invalidate()。
event handling and threading (事件處理、執行緒處理)
1.乙個事件產生和分發到適當的view.view處理事件和通知所有監聽。
2.在處理事件過程中,view的邊界可能需要改變,view將呼叫requestlayout方法。
3.相似的如果,在處理事件過程中,view的樣子需要改變,將呼叫invalidate()。
4.如果其中requestlayout() 或 invalidate() 被呼叫。framework將測量、布局、合適的繪製
focus handling
framework 將處理響應使用者輸入的常規焦點移動,包括view移除、隱藏或乙個view可用時改變焦點。常看某個view是否有焦點 使用 isfocusable()方法 。設定是否可以獲取焦點使用setfousable(boolean)。
焦點運動是基於一種演算法,它在給定的方向上找到最近的鄰居。在少數情況下,預設演算法可能與開發人員的預期行為不匹配。在這些情況下,可以通過在布局檔案中使用以下xml屬性提供顯式重寫:
nextfocusdown
nextfocusleft
nextfocusright
nextfocusup
touch mode
對於具有觸控能力的裝置,一旦使用者觸控到螢幕,該裝置將進入觸控模式。從這一點開始,只有isfocusableintouchmode()為真的檢視才是可聚焦的,例如文字編輯小部件。其他可觸控的檢視,如按鈕,在觸控時不會集中注意力;它們只會觸發單擊偵聽器。
每當使用者按下方向鍵(如d-pad方向)時,檢視裝置將退出觸控模式,並找到要聚焦的檢視,這樣使用者就可以恢復與使用者介面的互動,而無需再次觸控螢幕。
觸控模式狀態維持在activitys之間。呼叫istouchmode()以檢視裝置當前是否處於觸控模式。
scolling
framework 提供支援view移動自身的內容。scrollby(int,int),scollto(int,int),awakenscrollbars()
animation
從android3.0開始,動畫檢視的首選方法是使用android.動畫包api。這些基於動畫的類改變了view物件的實際屬性,比如alpha和transationx。這種行為與基於預3.0動畫的類的行為形成了對比,後者只是動畫化了檢視在顯示上的繪製方式。特別是,viewproperty動畫類使得動畫這些檢視屬性變得特別容易和高效。或者,您可以使用預-3.0動畫類來動畫檢視的呈現方式。您可以使用setanimation(animation)或staranimation(animation)將動畫物件附加到檢視。動畫可以隨著時間的推移改變檢視的比例、旋轉、平移和alpha。如果動畫附加到有子檢視,則動畫將影響由該節點根植的整個子樹。當動畫啟動時,框架將負責重新繪製適當的檢視,直到動畫完成。
謙遜程式設計(翻譯整理)
譯註 開發人員如何從無休止的需求 專案進度中擺脫煩躁的心態,這是每個人都值得思考的話題。無意間看見了這篇文章 恐於太長遂將其精簡翻譯,錯誤之處難免歡迎指正。split 其實每個程式設計師或多或少都會有個毛病,就是具有某種有強烈的 優越感 而這種 優越感 有可能成為激勵自身不斷發展的動力,同時也有可能...
python翻譯 Python翻譯
translator.py coding utf 8 author inspurer 月小水長 pc type lenovo create time 2019 4 6 15 44 file name translator.py github qq郵箱 2391527690 qq.com import...
翻譯外掛程式的不翻譯屬性
最近在寫乙個片假名注音外掛程式,提到,注音內容不要被翻譯外掛程式翻譯。開始在網上找到谷歌翻譯的不翻譯屬性,但是國內流行的彩雲小譯和有道不支援。由於它們的官網沒有相關說明,所以只能分析它們的外掛程式看看。谷歌翻譯,只要在標籤的class裡面增加notranslate即可。彩雲小譯,可以在標籤的clas...