翻譯 整理View , API

2021-08-20 16:30:37 字數 4371 閱讀 3307

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...