前言
首先仇冯,我們要明確一個,什么是Material Design?Material Design,是谷歌在14年的IO大會上提出的一種新的理念肝匆,也被稱為新的設(shè)計語言(也被稱為“原材料設(shè)計”),稱它為設(shè)計語言不為過顺献,但是實際上旗国,這僅僅是谷歌提倡的一種新的設(shè)計風(fēng)格、理念以及設(shè)計基本原則注整。
同時能曾,大家也要明白,它在Android 5.0之后被引入肿轨,而LZ寿冕,現(xiàn)在才開始接觸,了解椒袍,希望為時不晚~這里附上官方學(xué)習(xí)地址:
https://developer.android.google.cn/about/versions/lollipop.html
Material Design基礎(chǔ)了解
Material Design重點在于一點驼唱,它的存在,讓控件有了生命驹暑,對應(yīng)的也擁有了層次感玫恳,提升了用戶交互感觸。
那么層次感又是什么呢优俘?如下圖所示:
之前京办,僅僅是X、Y軸帆焕,而現(xiàn)在新增了一個Y軸惭婿,也就是屏幕上方位置,具體與用戶交互效果如下:
那么對于不同的職業(yè)對待它的標(biāo)準(zhǔn)又是什么呢叶雹?
美工:盡量遵循Material Design設(shè)計财饥,提升原有界面UI以及圖標(biāo)設(shè)計;
產(chǎn)品:盡量遵循Material Design界面設(shè)計折晦、界面跳轉(zhuǎn)佑力、動畫效果、以及與用戶交互設(shè)計筋遭;
開發(fā):實現(xiàn)基于Material Design設(shè)計
Material Design基礎(chǔ)使用
谷歌開發(fā)以及收集了一些最新的開源的項目,匯集到最新的support兼容支持包以及最新的5.X API里面。而關(guān)于support包漓滔,我們不得不提有如下幾點:
android-support-v4:最低兼容到Android 1.6系統(tǒng)编饺,里面包含類似ViewPager等控件;
android-support-v7:最低兼容到Android 2.1的系統(tǒng)响驴,這個工程可以讓開發(fā)人員統(tǒng)一開發(fā)標(biāo)準(zhǔn)透且,在任何的系統(tǒng)版本下保證兼容性,but豁鲤,其中有的控件就不能兼容到2.1秽誊,比如我們強大的recyclerView,它最低兼容到3.0
而關(guān)于兼容性琳骡,我們會在下面進行講解說明锅论。But,大家在引入v7的時候楣号,是不是總會有些問題最易?這里為大家舉例說明一下:
自動導(dǎo)入的appcompat-v7項目自身就是報錯的,什么原因炫狱?
build的版本太低了藻懒,要么是SDK很新但是兼容包沒有更新。
appcompat-v7好不容易沒報錯视译,但是項目報錯嬉荆,一看控制臺:報appcompat里面的某個res/values/theme/xxx屬性不存在 等等問題,這又是什么原因酷含?
因為你引入的是很新的appcompat-v7項目鄙早,它要求必須很高的版本編譯,所以直接使用最高版本編譯即可第美。況且蝶锋,現(xiàn)在我們一般的app開發(fā),最低兼容到4.0什往,感覺4.0的設(shè)備少之又少了吧扳缕,不過也不排除~
Material Design初體驗
Material Design控制項目全局樣式
引入v7包依賴
編寫自定義主題文件
默認創(chuàng)建項目自動創(chuàng)建如下:
@color/colorPrimary@color/colorPrimaryDark@color/colorAccent
基于以上內(nèi)容,我們進行相應(yīng)編輯别威。
@color/mytextcolor@color/colorPrimary_pink@color/colorPrimary_pinkDark@color/background#906292@color/colorPrimary_pink
顯示的效果如下:
在此躯舔,網(wǎng)上給大家找了一個針對以上屬性繪制比較細致的圖,方便大家更好的理解和掌握省古。
拓展控件
在這里粥庄,我們首先要明確,我們?yōu)槭裁匆褂胿7包下面的資源內(nèi)容呢豺妓?
因為這里面是谷歌為了解決Android碎片化而準(zhǔn)備的很牛逼的新技能惜互,它的出現(xiàn)布讹,讓我們開發(fā)出來的app可以在不同的系統(tǒng)版本,不同的廠商定制的Android上面運行有著幾乎相同的體驗~
不信训堆?那我們舉幾個簡單的例子瞅瞅~專治各種不服
1. AlertDialog與v7 AlertDialog
點擊按鈕描验,彈出Dialog,關(guān)鍵代碼如下:
publicvoidshowDialog(View view){ ? ? ? ?AlertDialog.Builder builder =newAlertDialog.Builder(this); ? ? ? ?builder.setTitle("提示").setMessage("哇咔咔"); ? ? ? ?builder.setPositiveButton("嗯嗯好",newDialogInterface.OnClickListener() {
@OverridepublicvoidonClick(DialogInterface dialogInterface,inti){ ? ? ? ? ? ?} ? ? ? ?}); ? ? ? ?builder.setNegativeButton("555No",newDialogInterface.OnClickListener() {
@OverridepublicvoidonClick(DialogInterface dialogInterface,inti){ ? ? ? ? ? ?} ? ? ? ?}); ? ? ? ?builder.show(); ? ?}
publicvoidshowSupportDialog(View view){ ? ? ? ?android.support.v7.app.AlertDialog.Builder builder =newandroid.support.v7.app.AlertDialog.Builder(this); ? ? ? ?builder.setTitle("提示").setMessage("哇咔咔"); ? ? ? ?builder.setPositiveButton("嗯嗯好",newDialogInterface.OnClickListener() {
@OverridepublicvoidonClick(DialogInterface dialogInterface,inti){ ? ? ? ? ? ?} ? ? ? ?}); ? ? ? ?builder.setNegativeButton("555No",newDialogInterface.OnClickListener() {
@OverridepublicvoidonClick(DialogInterface dialogInterface,inti){ ? ? ? ? ? ?} ? ? ? ?}); ? ? ? ?builder.show(); ? ?}
而實現(xiàn)的效果坑鱼,在5.0設(shè)備如下:
而在4.4的設(shè)備上膘流,差距變真正顯示出來了,如下:
2. Button PK AppCompatButton
上碼:
效果如下:
啊哦鲁沥,沒啥效果呼股,接著往下瞅瞅~
3. ProgressBar
直接擼碼,沒啥可說的画恰,布局文件:
activity設(shè)置進度條屬性:
bar= (ProgressBar) findViewById(R.id.id_pro);
bar.setMax(100);
bar.setProgress(50);
效果如下:
4. SwipeRefreshLayout
上一套布局:
... ...
再來一套初始化:
srl = (SwipeRefreshLayout) findViewById(R.id.id_srl);srl.setSize(SwipeRefreshLayout.LARGE);srl.setOnRefreshListener(newSwipeRefreshLayout.OnRefreshListener() {
@OverridepublicvoidonRefresh(){
// 下拉完畢 加載更多數(shù)據(jù)
// srl.setRefreshing(false);}});srl.setColorSchemeColors(Color.RED, Color.BLUE, Color.GREEN);
//設(shè)置進度條的背景顏色
srl.setProgressBackgroundColorSchemeColor(Color.YELLOW);
//設(shè)置下拉多少距離開始刷新
srl.setDistanceToTriggerSync(70);
最后放個大招彭谁,效果圖:
5. LinearLayoutCompat:給包裹在里面的所有子控件添加間隔線
效果如下:
6. PopupWindow 拓展 ListPopupWindow PopupMenu
ListPopupWindow :
privateArrayAdapter adapter; ? ? ? ?String[] items = {"條目0","條目1","條目2","條目3","條目4","條目5","條目6",};
// 數(shù)據(jù)adapter =newArrayAdapter<>(this, android.R.layout.simple_list_item_1, items);publicvoidshowPopup(View v){
finalListPopupWindow listPopupWindow =newListPopupWindow(this); ? ? ? ?listPopupWindow.setAdapter(adapter);
//設(shè)置錨點,彈出的位置是相對于v的位置listPopupWindow.setAnchorView(v); ? ? ? ?listPopupWindow.setWidth(200); ? ? ? ?listPopupWindow.setHeight(500); ? ? ? ?listPopupWindow.show(); ? ? ? ?listPopupWindow.setOnItemClickListener(newAdapterView.OnItemClickListener() {
@OverridepublicvoidonItemClick(AdapterView parent, Viewview,
intposition,longid){ ? ? ? ? ? ? ? ?Toast.makeText(getApplicationContext(),"點了第"+ position,0).show(); ? ? ? ? ? ? ? ?listPopupWindow.dismiss(); ? ? ? ? ? ?} ? ? ? ?}); ? ?}
效果如下:
PopupMenu:
編寫布局文件:
Activity:
PopupMenu popup =newPopupMenu(SupportUseActivity.this, view); ? ?popup.getMenuInflater() ? ? ? ? ? ?.inflate(R.menu.main, popup.getMenu()); ? ?popup.setOnMenuItemClickListener(newPopupMenu.OnMenuItemClickListener() {
publicbooleanonMenuItemClick(MenuItem item){
returntrue; ? ? ? ?} ? ?}); ? ?popup.show();
效果如下:
Demo查看地址
https://github.com/HLQ-Struggle/MaterialDesignStudy
該文章轉(zhuǎn)自:http://mp.weixin.qq.com/s/lZW-mH_Ftc00we3-ijTZCw