1. 程式人生 > >自定義控制元件不顯示,,,,,,填坑

自定義控制元件不顯示,,,,,,填坑

自定義控制元件分為繼承View和繼承ViewGroup,兩者不同。

1、繼承View  必須重寫 onLayout() 、onDraw()

因為View相當於沒什麼形狀的控制元件,需要你去重寫onDraw() 去自己畫出來。重寫onLayout() 為了指定 畫在哪裡。

2、繼承ViewGroup  必須重寫  onMeasure()、onLayout()

因為ViewGroup需要新增view進去,這裡的view是指Android已經幫你畫好的控制元件。但是手機不知道這個控制元件應該畫多大,畫在什麼位置。所以要重寫這個兩個方法。而不用重寫onDraw()。

下面說繼承ViewGroup  我爬過的坑。

 1、重寫onMeasure()方法,一定要在最後設定這個自定義控制元件的測量值   setMeasuredDimension();

2、如果給自定義控制元件,加入的控制元件還是ViewGroup的控制元件組,(繼承ViewGroup的也算,如LinearLayout)。在重寫的onMeasure()中,也一定要對 自定義控制元件的 childs 測量。如下程式碼 : child.measure(child.getWidth(),child.getHeight())   否則會導致控制元件不顯示

  因為自定義控制元件的 子控制元件還是繼承ViewGroup的控制元件 所以還是需要測量大小。(自己的理解,不一定對。搜了許久沒有看到合理解釋)

3、關於setMeasuredDimension()   引數的選擇。這個方法是設定 自定義控制元件 的大小。所以如果自定義控制元件的屬性是 match_parent或者固定的數值,直接寫 onMeasure()的兩個引數就行,widthMeasureSpec和heightMeasureSpec   如果自定義控制元件的屬性是  warp_content  就需要測量子控制元件的大小,把所有子控制元件所需要的長寬 當成引數,寫到這個方法裡。