讀后感-Android第一行代碼第二版(3)

前言

郭神出品,必屬精品,記得在剛做Android開(kāi)發(fā)的時(shí)候,當(dāng)時(shí)買了Android第一行代碼第一版,看了之后感覺(jué)內(nèi)容通俗易懂,收獲頗多,當(dāng)時(shí)還不知道作者是郭神,后來(lái)在CSDN上看了很多他寫(xiě)的文章,發(fā)現(xiàn)原來(lái)作者就是郭神,現(xiàn)在他出了第二版,果斷將書(shū)買了回來(lái),書(shū)很早就看完了,今天將書(shū)籍翻了出來(lái)看了一下,決定將自己的想法給記錄一下.

第十二章 最佳的UI體驗(yàn)------Material Design實(shí)踐

??其實(shí)長(zhǎng)久以來(lái),大多數(shù)人都認(rèn)為Android系統(tǒng)的UI并不算美觀,至少?zèng)]有iOS系統(tǒng)的美觀.以至于很多IT公司在進(jìn)行應(yīng)用界面設(shè)計(jì)的時(shí)候,為了保證平臺(tái)的統(tǒng)一性,強(qiáng)制要求Android端的界面風(fēng)格必須和iOS端一致,這種情況在工作中很常見(jiàn),為了解決這個(gè)問(wèn)題,谷歌也祭出了殺手锏,在2014Google I/O大會(huì)上重磅推出了一套全新的界面設(shè)計(jì)語(yǔ)言------Material Design

12.1 什么是Material Design

??Material Design是由谷歌的設(shè)計(jì)工程師基于傳統(tǒng)優(yōu)秀的設(shè)計(jì)原則,結(jié)合豐富的創(chuàng)意和科學(xué)技術(shù)所發(fā)明的一套全新的界面設(shè)計(jì)語(yǔ)言,包含了視覺(jué),運(yùn)動(dòng),互動(dòng)效果等特性.為了做出表率,谷歌從Android5.0系統(tǒng)開(kāi)始,就將所有的應(yīng)用都是用Material Design風(fēng)格來(lái)進(jìn)行設(shè)計(jì),但是一開(kāi)始Material Design主要是面向UI設(shè)計(jì)人員的,很多開(kāi)發(fā)者根本搞不清楚什么樣的界面和效果才叫Material Design,就算搞清楚了,實(shí)現(xiàn)起來(lái)也很費(fèi)勁,當(dāng)時(shí)Android中并沒(méi)有提供相應(yīng)的API支持,一切要開(kāi)發(fā)者從零寫(xiě)起.
?? 谷歌當(dāng)然也意識(shí)到了這個(gè)問(wèn)題,于是在2015年的Google I/O大會(huì)上推出了一個(gè)Design Support庫(kù),這個(gè)庫(kù)中最具代表性的一些控件和效果進(jìn)行了封裝,使得開(kāi)發(fā)者在即使不了解Material Design的情況也能非常輕松地將自己的應(yīng)用Material化.

12.2 Toolbar

??Toolbar使我們接觸的第一個(gè)Material控件,雖說(shuō)對(duì)于Toolbar你暫時(shí)應(yīng)該還是比較陌生的,但是對(duì)于它的另一個(gè)相關(guān)控件ActionBar.你應(yīng)該就熟悉了.Toolbar的強(qiáng)大之處在于,他不僅繼承了ActionBar的所有功能,而且靈活性很高,可以配合其他控件來(lái)完成一些Material Design的效果.
??如下代碼:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:background="@color/colorPrimary"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:layout_height="?attr/actionBarSize"/>

</FrameLayout>

??Toolbar是由appcompat-v7庫(kù)提供的,這里我們給Toolbar指定了一個(gè)id,將它的寬度設(shè)置為match_parent,高度設(shè)置為actionBar的高度,背景色設(shè)置為colorPrimary,由于我們剛才在styles.xml中將程序的主題指定成了淡色主題,因此Toolbar現(xiàn)在也是淡色主題,而Toolbar上面的各種元素就會(huì)自動(dòng)使用深色系,這是為了和主體顏色區(qū)別開(kāi),但是這個(gè)效果會(huì)看起來(lái)很差,之前使用ActionBar時(shí)文字都是白色的, 現(xiàn)在變成了黑色的會(huì)很難看.那么為了能讓Toolbar單獨(dú)使用深色主題,這里我們使用android:theme屬性,將Toolbar的主題指定成了ThemeOverlay.AppCompat.Dark.ActionBar.但是這樣指定完了之后又會(huì)出現(xiàn)新的問(wèn)題,如果Toolbar中有菜單按鈕,那么彈出的菜單項(xiàng)也會(huì)變成深色主題,這樣就再次變得十分難看.于是這里使用了app:popupThme這個(gè)屬性單獨(dú)將彈出的菜單項(xiàng)指定成淡色在主題,之所以使用app:popupTheme,是因?yàn)閜opupTheme這個(gè)屬性是在Android5.0系統(tǒng)中新增的,我們使用app:popupTheme的話就可以兼容Android5.0以下的系統(tǒng)了.
??代碼中設(shè)置:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
}
}

??運(yùn)行效果:


效果圖

12.3 滑動(dòng)菜單

滑動(dòng)菜單可以說(shuō)是Material Design最常見(jiàn)的效果了,在許多的應(yīng)用中,都有滑動(dòng)菜單的功能.

12.3.1 DrawerLayout

DrawerLayout它是一個(gè)布局,在布局中允許放入兩個(gè)直接子控件,第一個(gè)子控件是主屏幕中顯示的內(nèi)容,第二個(gè)子控件是滑動(dòng)菜單中顯示的內(nèi)容.它是由support-v4庫(kù)提供的,關(guān)于第二個(gè)子控件有一點(diǎn)需要注意,layout_gravity這個(gè)屬性是必須指定的,因?yàn)槲覀冃枰嬖VDrawerLayout滑動(dòng)菜單是在屏幕的左邊還是右邊,指定left表示滑動(dòng)菜單在左邊,指定right表示滑動(dòng)菜單在右邊.如果指定start的話,表示會(huì)根據(jù)系統(tǒng)語(yǔ)言進(jìn)行判斷,如果系統(tǒng)語(yǔ)言是從左往右的,比如英語(yǔ),漢語(yǔ),滑動(dòng)菜單就在左邊, 如果系統(tǒng)語(yǔ)言是從右往左的,比如阿拉伯語(yǔ),滑動(dòng)菜單就在右邊.

12.4 懸浮按鈕和可交互提示

12.4.1 FloatingActionButton

FloatingActionButton是Design Support庫(kù)中提供的一個(gè)控件,這個(gè)控件可以幫助我們比較輕松地實(shí)現(xiàn)懸浮按鈕的效果.
FloatingActionButton屬性介紹:

  • app:elevation: 給FloatingActionButton指定一個(gè)高度值,高度值越大,投影范圍越大,但是投影效果越淡,高度值越小,投影范圍越小,但是投影的效果越濃
  • app:backgroundTing: FloatingActionButton背景顏色
12.4.2 Snackbar
12.4.3 Coordinatorlayout

Coordinatorlayout可以說(shuō)是一個(gè)加強(qiáng)版的FrameLayout,這個(gè)布局也是由Design Support庫(kù)提供的,他在普通情況下的作用和FrameLayout基本一致 ,不過(guò)既然是Design Support庫(kù)中提供的布局,那么必然有一些Material Design的魔力了.事實(shí)上Coordinatorlayout可以監(jiān)聽(tīng)所有子控件的各種事件,然后自動(dòng)幫助我們做出最為合理的相應(yīng),故又被稱作協(xié)作布局.

12.5 卡片式布局

12.5.1 CardView

CardView是用于實(shí)現(xiàn)卡片布局效果的重要控件,由appcompat-v7庫(kù)提供,實(shí)際上,CardView也是一個(gè)FrameLayout,只是額外提供了圓角和陰影等效果,看上去會(huì)有立體的感覺(jué).

12.5.2 AppBarLayout

在開(kāi)發(fā)中,AppBarLayout一般是嵌套Toolbar使用,并設(shè)置app:layout_scrollFlags屬性,從而實(shí)現(xiàn)Material Design的效果

12.6 下拉刷新SwipeRefreshlayout

官方提供的下拉刷新控件

12.7 可折疊式標(biāo)題欄

12.7.1 CollapsingToolbarLayout

顧名思義,CollapsingToolbarLayout是一個(gè)作用于Toolbar基礎(chǔ)之上的布局,他也是由Design Support庫(kù)提供的.CollapsingToolbarLayout可以讓Toolbar的效果變得更加豐富,不僅展示一個(gè)標(biāo)題欄,而是能夠?qū)崿F(xiàn)非常華麗的效果.不過(guò)CollapsingToolbarLayout是不能獨(dú)立存在的,它在設(shè)計(jì)的時(shí)候就被限定只能作為AppBarlayout的直接子布局來(lái)使用.

最佳實(shí)踐

看代碼:

activity_material_design.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout         
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
xmlns:app="http://schemas.android.com/apk/res-auto">

<android.support.design.widget.AppBarLayout
    android:fitsSystemWindows="true"
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="250dp">

    <android.support.design.widget.CollapsingToolbarLayout
        android:fitsSystemWindows="true"
        app:collapsedTitleGravity="center"
        app:expandedTitleGravity="center|bottom"
        android:id="@+id/collapsing_toolbar"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:contentScrim="@color/colorPrimary"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:scaleType="fitXY"
            android:fitsSystemWindows="true"
            app:layout_collapseMode="parallax"
            android:src="@drawable/timg"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            app:layout_collapseMode="pin"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"/>



    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

<android.support.design.widget.FloatingActionButton
    app:layout_anchor="@+id/appbar"
    app:layout_anchorGravity="bottom|right"
    android:layout_margin="20dp"
    app:fabSize="normal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<android.support.v4.widget.NestedScrollView
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <ImageView
            android:padding="10dp"
            android:layout_gravity="center_horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/ic_launcher"/>
        <ImageView
            android:padding="10dp"
            android:layout_gravity="center_horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/ic_launcher"/>  <ImageView
        android:padding="10dp"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"/>  <ImageView
        android:padding="10dp"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"/>  <ImageView
        android:padding="10dp"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"/>  <ImageView
        android:padding="10dp"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"/>  <ImageView
        android:padding="10dp"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"/>  <ImageView
        android:padding="10dp"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"/>  <ImageView
        android:padding="10dp"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"/>  <ImageView
        android:padding="10dp"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"/>  <ImageView
        android:padding="10dp"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"/>  <ImageView
        android:padding="10dp"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"/>

    </LinearLayout>


</android.support.v4.widget.NestedScrollView>

</android.support.design.widget.CoordinatorLayout>

menu_material_design.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item android:title="test"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:showAsAction="never"
    android:icon="@mipmap/ic_launcher"/>
</menu>

MaterialDesignActivity

public class MaterialDesignActivity extends AppCompatActivity{

CollapsingToolbarLayout collapsingToolbar;
Toolbar toolbar;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_material_design);

    collapsingToolbar = findViewById(R.id.collapsing_toolbar);
    toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    collapsingToolbar.setTitle("erdai66sdfawsdfasdfasdfasdfasdf6");

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_material_design,menu);
    return true;
}
}

主題設(shè)置--在res下新建一個(gè)value-v21的文件夾,創(chuàng)建一個(gè)styles.xml

<style name="MaterialDesignTheme" parent="AppTheme">
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

效果展示:
展開(kāi)的時(shí)候:


效果圖

折疊的時(shí)候:


效果圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末秧均,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子号涯,更是在濱河造成了極大的恐慌目胡,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件链快,死亡現(xiàn)場(chǎng)離奇詭異誉己,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)久又,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)巫延,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人地消,你說(shuō)我怎么就攤上這事炉峰。” “怎么了脉执?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵疼阔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)婆廊,這世上最難降的妖魔是什么迅细? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮淘邻,結(jié)果婚禮上茵典,老公的妹妹穿的比我還像新娘。我一直安慰自己宾舅,他們只是感情好统阿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著筹我,像睡著了一般扶平。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蔬蕊,一...
    開(kāi)封第一講書(shū)人閱讀 51,763評(píng)論 1 307
  • 那天结澄,我揣著相機(jī)與錄音,去河邊找鬼岸夯。 笑死麻献,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的囱修。 我是一名探鬼主播赎瑰,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼破镰!你這毒婦竟也來(lái)了餐曼?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鲜漩,失蹤者是張志新(化名)和其女友劉穎源譬,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體孕似,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡踩娘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了喉祭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片养渴。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖泛烙,靈堂內(nèi)的尸體忽然破棺而出理卑,到底是詐尸還是另有隱情,我是刑警寧澤蔽氨,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布藐唠,位于F島的核電站帆疟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏宇立。R本人自食惡果不足惜踪宠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妈嘹。 院中可真熱鬧柳琢,春花似錦、人聲如沸润脸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)津函。三九已至,卻和暖如春孤页,著一層夾襖步出監(jiān)牢的瞬間尔苦,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工行施, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留允坚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓蛾号,卻偏偏與公主長(zhǎng)得像稠项,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鲜结,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,189評(píng)論 25 707
  • 第十二章主要講了 Material Design 的一些用法 一展运、Maternal Design 介紹 ??And...
    radish520like閱讀 1,150評(píng)論 4 8
  • 原文鏈接:https://github.com/opendigg/awesome-github-android-u...
    IM魂影閱讀 32,942評(píng)論 6 472
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,769評(píng)論 22 665
  • 連續(xù)日更了20天的簡(jiǎn)書(shū),在昨天和前天的周末停了兩天精刷,匱乏的素材本來(lái)還是可以擠出一千字的拗胜,但周六馬不停蹄地忙到了11...
    晶小沙閱讀 130評(píng)論 2 1