Android提供了一個預建的部件,如Button, TextView, EditText, ListView, CheckBox, RadioButton, Gallery, Spinner, AutoCompleteTextView等可以直接使用在Android應用程式開發中,但有可能還有一種情況,當不滿意現有可用的視窗小部件的功能。 Android 提供建立自定義元件功能,定制以滿足需求。
如果隻需要進行小的調現有的小工具或布局,可以簡單的子類的小工具或布局和覆寫它的方法,這将精确地控制螢幕元素的外觀和功能。
本教程介紹了如何建立自定義視圖,并利用它們在應用程式,如下步驟。
建立一個簡單的自定義元件
最簡單的建立自定義的元件方法是擴充現有的widget類或子類,如果想擴充現有部件,如Button, TextView, EditText, ListView, CheckBox等,否則可以從android.view.View類開始擴充。
在其最簡單的形式,編寫構造函數對應的所有基類的構造函數。例如,如果要擴充 TextView 建立DateView 以下三個構造,建立DateView類:
publicclassDateViewextendsTextView{publicDateView(Contextcontext){super(context);//--- Additional custom code --}publicDateView(Contextcontext,AttributeSetattrs){super(context,attrs);//--- Additional custom code --}publicDateView(Contextcontext,AttributeSetattrs,intdefStyle){super(context,attrs,defStyle);//--- Additional custom code --}}
TextView 的子類DateView已經建立,是以可以獲得有關TextView 的所有屬性、方法和事件,能夠使用不需要任何進一步的實作。這裡将實作額外的自定義功能在自己編寫的代碼,如下面的例子解釋。
如果要求執行自定義繪圖/定制部件的尺寸,那麼需要重寫 onMeasure(int widthMeasureSpec, int heightMeasureSpec) 和 onDraw(Canvas canvas) 方法。如果不打算調整或變更内置元件的形狀,那麼并不需要使用這些方法在自定義元件。
布局管理報告部件的寬度和高度需要協調 onMeasure() 方法,需要調用setMeasuredDimension(int width, int height),這種方法來報告尺寸大小。
可以執行自定義繪圖裡Canvas 的onDraw(Canvas canvas) 方法,其中android.graphis.Canvas其對應 Swing 是非常相似的,drawRect(), drawLine(), drawString(), drawBitmap() 等,可以用它來繪制元件。
完成了一個自定義元件的實作之後,通過擴大現有的部件,将能夠執行個體化這些自定義元件在應用程式開發兩種方式:
Activity類執行個體内使用代碼
這是非常相似的方式執行個體化自定義元件執行個體的方式,在活動類的内置部件。例如,可以使用下面的代碼執行個體上面定義的自定義元件:
@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);DateViewdateView=newDateView(this);setContentView(dateView);}
檢視這個例子來了解如何使用代碼裡面活動執行個體化一個基本的Android自定義元件。
使用布局XML檔案執行個體
使用傳統布局XML檔案執行個體的内置部件,相同的概念适用于自定義部件,是以将能夠執行個體化自定義元件布局XML檔案,解釋如下。在com.yiibai.dateviewdemo包,已經把所有的代碼相關DateView 和 DateView 類,已經把自定義元件的完整的邏輯的Java類名。
要注意,在這裡我們使用的所有 TextView 屬性以及自定義元件沒有任何變化。類似的方式能夠使用所有的事件、方法,以及DateView元件。
通過這個例子,了解如何使用布局XML檔案執行個體化一個基本的Android自定義元件。
使用自定義屬性的自定義元件
我們已經看到可以如何擴充功能的内置部件,但上面給出兩個例子中看到,擴充元件,可以利用它的父類的所有預設屬性。但考慮到一種情況,當想從頭開始建立自己的屬性。下面是一個簡單的程式建立和使用Android的自定義元件的新屬性。這裡介紹三個屬性,并使用它們,如下所示:
第1步
第一步,使用自定義的屬性在 res/values/ 目錄下建立新XML檔案中定義attrs.xml。看看一個例子檔案 attrs.xml:
這裡 name=value 就是要使用的布局XML檔案中并作為屬性,format=type 屬性的類型。
第2步
第二個步驟将是從布局XML檔案中讀取這些屬性,并将其設定為元件。這個邏輯将獲得通過屬性集的構造函數,因為這是包含XML屬性。要讀取XML中的值,首先需要從AttributeSet建立一個TypedArray,然後用它來讀取和設定值,如下面的示例代碼所示:
TypedArraya=context.obtainStyledAttributes(attrs,R.styleable.DateView);finalintN=a.getIndexCount();for(inti=0;i
第3步
最後,可以使用布局XML檔案中定義的屬性如下:
重要的部分是xmlns:custom="http://schemas.android.com/apk/res/com.yiibai.dateviewdemo"。需要注意的是http://schemas.android.com/apk/res/将保持原樣,但最後一部分需要設定包名,也可以使用任何xmlns:在這個例子中,使用的是custom,但可以使用任何喜歡的名字。
¥ 我要打賞
糾錯/補充
收藏
加QQ群啦,易百教程官方技術學習群
注意:建議每個人選自己的技術方向加群,同一個QQ最多限加 3 個群。