<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## view類官方文檔 [TOC] ### View和Activity的區別 Activity相當于視圖層中的控制層,是用來控制和管理View的,真正用來顯示和處理事件的實際上是View。 * Window對象: Window對象包含了一個DecorView(實際上就是FrameLayout)-內部類 * setContentView():通過LayoutInflater.infalte()方法加載布局生成View對象并通過addView()方法添加到Window上 * ### canvas大小 創建自定義視圖并覆蓋它的onDraw()。 沒有覆蓋onMeasure()畫布占據整個設備屏幕。 覆蓋onMeasure(),將canvas重新調整為傳遞給setMeasuredDimension()的維度。 因此我們可以確保調整畫布大小,并且必須在onMeasure()中完成。 ### 定義 這個類表示用戶界面組件的基本構建塊。視圖在屏幕上占據一個矩形區域,負責繪圖和事件處理。 ### 使用視圖 * **設置屬性**.例如設置TextView文本 。可用屬性和設置它們的方法將根據視圖的不同子類而有所不同。請注意,可以在XML布局文件中設置構建時已知的屬性。 * **設置焦點**.框架將處理移動焦點以響應用戶輸入.requestFocus() * **設置偵聽器**. * **設置可見性**:您可以使用隱藏或顯示視圖 setVisibility(int) ### 實現自定義視圖 view生命周期 ![](https://img-blog.csdn.net/20150222132925155) 首先是調用了構造方法,這是不用猜都該知道的,然后呢調用了onFinishInflate方法,這個方法當xml布局中我們的View被解析完成后則會調用,具體的實現在LayoutInflater的rInflate方法中. 緊接著調用的是onAttachedToWindow方法,此時表示我們的View已被創建并添加到了窗口Window中,該方法后緊接著一般會調用onWindowVisibilityChanged方法,只要我們當前的Window窗口中View的可見狀態發生改變都會被觸發,這時View是被顯示了. 隨后就會開始調用onMeasure方法對View進行測量,如果測量結果被確定則會先調用onSizeChanged方法通知View尺寸大小發生了改變,緊跟著便會調用onLayout方法對子元素進行定位布局,然后再次調用onMeasure方法對View進行二次測量,如果測量值與上一次相同則不再調用onSizeChanged方法,接著再次調用onLayout方法,如果測量過程結束,則會調用onDraw方法繪制View。 要實現自定義視圖,通常首先為框架調用所有視圖的某些標準方法提供覆蓋。您不需要覆蓋所有這些方法。事實上,你可以從覆蓋onDraw開始. #### 創建 **構造函數** ~~~ //一般在直接New一個View的時候調用 public CharView(Context context) { super(context); } //一般在layout文件中使用的時候會調用,關于它的所有屬性(包括自定義屬性)都會包含在attrs中傳遞進來。 public CharView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } ~~~ **onFinishInflate()** Activity中調用setContentView之后就會調用onFinishInflate這個方法 #### 附上 **onAttachedToWindow()** 視圖附加到窗口時調用。 **onWindowVisibilityChanged(int)** 當包含視圖的窗口的可見性發生更改時調用。 **onDetachedFromWindow()** 視圖從其窗口分離時調用。 #### 布局 **onMeasure(int, int)** 調用以確定此視圖及其所有子項的大小要求。 **onLayout(boolean, int, int, int, int)** 當此視圖應為其所有子項指定大小和位置時調用。 **onSizeChanged(int, int, int, int)** 在此視圖的大小發生更改時調用。 #### 繪制 **onDraw(android.graphics.Canvas)** 視圖應呈現其內容時調用。 #### 事件處理 **onKeyDown(int, KeyEvent)** 用戶按下一個鍵盤按鍵時. **onKeyUp(int, KeyEvent)** 彈起 **onTouchEvent(MotionEvent)** 發生觸摸屏事件時調用。 #### 焦點 **onFocusChanged(boolean, int, android.graphics.Rect)** 視圖獲得或失去焦點時調用。 **onWindowFocusChanged(boolean)** 當包含視圖的窗口獲得或失去焦點時調用。 ### 標識 視圖可能具有與之關聯的整數id。這些ID通常在布局XML文件中分配,用于查找視圖樹中的特定視圖。 * 在布局文件中定義一個Button,并為其分配一個唯一的ID。 * 從Activity的onCreate方法中,找到Button.findViewById 視圖ID在整個樹中不一定是唯一的,但最好確保它們在您正在搜索的樹的部分內至少是唯一的。 ### 位置 視圖的幾何形狀是矩形的幾何形狀。視圖具有一個位置,表示為一對左坐標和頂坐標,以及兩個維度,表示為寬度和高度。位置和尺寸的單位是像素。 top:左上角縱坐標 left:左上角橫坐標 bottom:右下角縱坐標 right:右下角橫坐標 ![](https://img-blog.csdn.net/20170220111655145?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSU9fRmllbGQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ### 尺寸,填充和邊距 第一對稱為測量寬度和 測量高度。這些維度定義了視圖在其父級中的大小(有關詳細信息,請參閱布局。)可以通過調用getMeasuredWidth() 和獲取測量的維度getMeasuredHeight()。其實就是canvas大小 第二對簡稱為寬度和高度,有時也稱為繪圖寬度和繪圖高度。這些尺寸定義了屏幕上,繪圖時和布局后視圖的實際大小。這些值可以但不必與測量的寬度和高度不同。寬度和高度可以通過調用getWidth()和獲得 getHeight()。 ![](https://img-blog.csdn.net/20161120133312678) 填充以視圖的左,上,右和底部分的像素表示。填充可用于將視圖的內容偏移特定量的像素。例如,左邊的填充為2會將視圖的內容推到左邊緣右側2個像素。填充可以通過設置 setPadding(int, int, int, int)或setPaddingRelative(int, int, int, int) 方法通過調用和詢問getPaddingLeft(),getPaddingTop(), getPaddingRight(),getPaddingBottom(),getPaddingStart(), getPaddingEnd()。 ### 布局 ### 繪制 要強制繪制視圖,請調用invalidate()。 ### 事件處理和線程 invalidate() 請求重繪View樹,即draw()過程。把例子中他是整個刷新著UI,并且從頭到尾并不會觸發onMeasure()方法(控制大小用)。如果是View就重繪View,如果是ViewGroup就全部重繪。 requestLayout() 他跟invalidate()相反,他只調用measure()和layout()過程,不會調用draw()。 滾動
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看