傳統方法是繼承現有View再重寫方法,這種方式缺點很多:
1.往往不能在xml編輯器中預覽效果;
2.比較難實現預期效果,比如設置寬度爲wrap_content,實際顯示爲match_parent等;
3.需要在xml代碼中聲明自定義View的全路徑,經常無法自動補全,需要手動複製粘貼路徑;
4.一旦自定義View修改了全路徑(移動至其它package、刪除等),xml代碼中並不會同步,但能編譯通過,然後在渲染這個自定義View時崩潰;
5.需要學習draw,measure等平時比較少用的方法;
6.需要維護大量代碼,constructor就得重寫3個。
使用ZBLibrary自定義View,以上通通不是問題!!!
最終效果圖和源碼如下
如何使用ZBLibrary自定義View
一、準備
1.依賴ZBLibrary
2.分別複製DemoView,demo_view,KeyValueBean到你自己項目的對應目錄下
二、使用
這裏以MainActivity和MainActivity的界面佈局activity_main做示範
1.在activity_main中的根佈局(最外層佈局)內添加以下代碼
<LinearLayout
android:id="@+id/llMainContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
</LinearLayout>
2.添加以下代碼到MainActivity的onCreate方法或者它裏面調用的方法中。
ImageLoaderUtil.init(this);
LinearLayout llMainContainer = (LinearLayout) findViewById(R.id.llMainContainer);
llMainContainer.removeAllViews();
DemoView demoView = new DemoView(this, null);
llMainContainer.addView(demoView.getView());
KeyValueBean data = new KeyValueBean("KEY", "123");
demoView.setView(data);
3.修改複製過來的DemoView中的KeyValueBean路徑爲你項目中的路徑,這裏爲 com.example.testselfdefinview.KeyValueBean,然後運行看效果
三、修改
1.分別改名稱爲你需要的,這裏分別改爲MyView,MyBean,my_view以作示範。
2.將MyView中import zuo.biao.library.R;中的zuo.biao.library路徑替換爲你項目的路徑。
3.將MyView中的demo_view改爲my_view;將MainActivity,MyView,my_view中的"DemoView"全部改爲"MyView"。
4.運行測試。如果出現問題,檢查以上步驟。
5.到這一步,將MyView看成一個Activity,將my_view看成這個Activity的界面佈局,然後修改MyView,MyBean,my_view代碼爲你想要的,就這麼簡單!
注:ZBLibrary自定義View方式不是萬能的,實現一些特殊功能還是要用繼承現有View的方式,不過在大多數情況下ZBLibrary都能用並且比繼承現有View好很多。
ZBLibrary-Android快速開發框架
下載地址(歡迎Star,歡迎Fork)
https://github.com/TommyLemon/Android-ZBLibrary
下載試用