android筆記22-UI模板設計

系統定義控件的步驟的步驟是首先定義atts.xml文件來定義控件的屬性,之後重寫控件,確定好繼承關係,最後在xml文件中使用控件;

參考系統,我們的設計需要:首先設計需要的屬性->實現一個"view"->引用所實現的"view"

步驟:
 第一步(設計屬性):在values目錄下新建一個xml文件,命名爲atts;通過聲明
<declare_styleable name=""
    <attr name=""   format="">   
    ...
</declare_styleable>

在declare_styleable標籤中:
name  --來表明這是控件或佈局;

在attr標籤中:
name    --自定義佈局中所含有的控件的屬性的名字
format  --在xml中引用資源的類型,資源可以是多種如reference|          color表示在定義顏色的時候不僅可以寫編碼還可以是資            源中的文件 ;

 第二步(創建佈局的類):在src源代碼目錄的包下,創建java文件用來實現佈局;選好繼承關係;因爲要自定義屬性,所以構造函數要選有AttributeSet類型的構造方法;將之前在xml文件中定義的屬性寫成類的成員變量;創建定義的佈局所包含的控件;

 第三步(將設置好的xml屬性值傳給佈局的成員變量,基本思路是在構造方法中獲得在xml中定義的屬性,並將這些值賦給相應的成員變量):在構造函數中,創建TypedArray對象,並調用context的obtainStyleAttributes(attrs,R.styleadle....)將返回值賦給TypedArray對象完成初始化;
 attrs爲構造函數中的AttributeSet對象;
 R.styleadle....爲在xml文件中標籤爲declare_styleable控件;
調用TypedArray對象的get函數(getColor(),getDrawable(),getString())來取出相應類型的屬性值,並將返回值賦值給對應的成員變量;
get(int index,int defValues)的兩個參數分別爲:
 index:R.styleable."declare_styleable"_"attr",相應佈局下的屬性的生成id時的命名規則;
 defValues:默認的返回值,設爲0;
最後注意在使用完TypedArray後要調用成員函數recycle()方法來進行回收;

 第四步(設置控件的相關屬性):爲佈局的控件賦值,即將context作爲構造函數的參數new出,再調用控件的相應函數將屬性賦給控件;
 
 第五步(設置佈局中控件的位置):爲類再創建LayoutParams對象;在構造函數中,調用LayoutParams(width,heighth)函數並將返回值賦給LayoutParams對象;
  width:爲寬,ViewGroup.LayoutParams.WRAP_CONTENT;
heighth:爲高,ViewGroup.LayoutParams.WRAP_CONTENT;
再調用LayoutParams對象的成員函數addRule()設置其他屬性;如addRule(RelativeLayout.ALIGN_PARENT_LEFT,TRUE);最後調用ViewGroup(即佈局類繼承的祖先)的addView(view,LayoutParams)方法將對應的控件與佈局位置關聯到一起;

第六步:指定完整的包名,即類的定義位置,前面加上"android:"用設置各種系統的屬性;如果是要設置自定義的屬性的話,要在一開始的位置處添加一個xmlns,爲命名空間取名(隨意),並加上佈局所在的位置
在(android studio中)
xmlns:空間名="http://schemas.android.com/apk/res-auto"
而在Eclipse中是"res/(應用程序的完整包名)"

第七步(實現接口回調,實現在activity中,可以編輯佈局的控件的點擊事件):創建接口(類似於Button的OnclickListener),接口內部是控件的方法;在創建一個set方法(類似於setOnClickListener),用於報告給調用者,參數類型爲接口名,再爲佈局創建一個接口類的成員變量,在方法中爲這個成員變量賦上方法的參數;在控件的setOnClickListener()中的onClick()方法中調用對應的佈局的接口類變量的控件方法;

第八步:創建佈局對象,調用findViewById()完成初始化;調用佈局對象的set方法,並在參數列表中new出佈局類的接口函數;最後設置各個控件的方法;



在xml佈局文件的屬性前的android是在最開始處的 xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xmlnamespace 表示的是命名空間,即通過android這個命名控件就可以引用到一些系統的屬性

接口回調機制:見博客http://blog.csdn.net/lindir/article/details/7819720
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章