Android自定義控制項之自定義組合控制項(三)

2021-09-08 23:23:11 字數 2640 閱讀 9484

前兩篇介紹了自定義控制項的基礎原理android自定義控制項之基本原理(一)、自定義屬性android自定義控制項之自定義屬性(二)。今天重點介紹一下如何通過自定義組合控制項來提高布局的復用,降低開發成本,以及維護成本。

1.)第一種方式:直接在每個xml布局中寫相同的標題欄布局**

<?xml version="1.0" encoding="utf-8"?>

這種方式沒有任何布局復用的概念,同時也讓當前的布局變得臃腫難以維護,開發效率低下,而且這個還需要要求每個開發人員必須細心否則有可能會做出參差不齊的標題欄,所以這種方式是最不推薦使用的。

2.)第二種方式:使用include標籤

首先定義標題欄布局

然後在需要的地方通過include標籤實現引用

通過上面的布局**,我們可以使用上面這種方式確實實現了布局的復用,而且也避免了開發人員開發出參差不齊標題欄的問題,但是同時也引入了新的問題,比如更加降低了開發效率,加大了開發成本,問題就在我們該如何為每個布局檔案定義標題欄?只有通過**的方式來設定標題問題,左右按鈕等其他的屬性,導致布局屬性和activity**耦合性比較高,所以這種方式也不是推薦的方式。

3.)第三種方式:通過自定義組合控制項

這裡先不具體介紹如何實現乙個自定義組合控制項,這裡先介紹一下自定義組合控制項帶來的好處。

1.)先定義乙個布局檔案

注意:這裡為何要使用merge標籤,自定義組合控制項時會繼承relativelayout、linearlayout等控制項,這樣導致布局的層級無形中增加了一層,如下是對比:

未使用merge標籤

使用merge標籤

2.)定義自定義屬性

比如標題文字、標題欄左邊按鈕圖示等。

3.)自定義乙個view根據需求繼承不同的viewgroup子類,比如:relativelayout、linearlayout等,我們這裡繼承relativelayout。

public class customtitlebar extends relativelayout  else 

//設定左邊按鈕的文字

string leftbuttontext = attributes.getstring(r.styleable.customtitlebar_left_button_text);

if (!textutils.isempty(leftbuttontext)) else

}//處理標題

//先獲取標題是否要顯示icon

int titletextdrawable = attributes.getresourceid(r.styleable.customtitlebar_title_text_drawable, -1);

if (titletextdrawable != -1) else

//獲取標題顯示顏色

int titletextcolor = attributes.getcolor(r.styleable.customtitlebar_title_text_color, color.white);

titlebartitle.settextcolor(titletextcolor);

}//先處理右邊按鈕

//獲取是否要顯示右邊按鈕

boolean rightbuttonvisible = attributes.getboolean(r.styleable.customtitlebar_right_button_visible, true);

if (rightbuttonvisible) else

//設定右邊按鈕的文字

string rightbuttontext = attributes.getstring(r.styleable.customtitlebar_right_button_text);

if (!textutils.isempty(rightbuttontext)) else

}attributes.recycle();}}

public void settitleclicklistener(onclicklistener onclicklistener)

}public button gettitlebarleftbtn()

public button gettitlebarrightbtn()

public textview gettitlebartitle()

}

4.)在不同的xml布局中引用

關於如何使用自定義屬性這裡就不再說明了,為了更加直觀的檢視效果,我這裡在乙個布局檔案中實現不同要求的標題欄

<?xml version="1.0" encoding="utf-8"?>

顯示效果

幹我們這行,啥時候懈怠,就意味著長進的停止,長進的停止就意味著被淘汰,只能往前衝,直到鳳凰涅槃的一天!

Android自定義控制項之自定義組合控制項

前兩篇介紹了自定義控制項的基礎原理android自定義控制項之基本原理 一 自定義屬性android自定義控制項之自定義屬性 二 今天重點介紹一下如何通過自定義組合控制項來提高布局的復用,降低開發成本,以及維護成本。1.第一種方式 直接在每個xml布局中寫相同的標題欄布局 這種方式沒有任何布局復用的...

Android自定義控制項之自定義View 二

效果如下圖 1 自定義ringview繼承view新增其構造方法並建立畫筆 public class ringview extends view protected boolean isrunning false public ringview context context public ring...

Android之自定義控制項

1.繼承view,view可以分為三種,基本的view,容器view,布局view 典型的view 如 imageview textview 容器類的view 如 listview gridview viewgroup 布局類的view 如 framelayout gridview linealay...