前言
Material Design是由谷歌的設計工程師們基於傳統優秀的設計原則,結合豐富的創意和科學技術所發明的一套全新的界面設計語言,包含了視覺、運動、互動效果等特性。現實生活中,很多公司會自己封裝界面的跳轉、設計等,於是很多android應用風格不統一。鑑於此,Google工程師們提供了一套基本的平臺界面。
此係列文章,一點點的介紹Material Design風格搭建。首先是“標題欄”:
工程創建
不必說,new project-empty activity,各種自己保存。空工程如圖一:
ActionBar
原系統自帶標題欄ActionBar基本上都知道,很多公司會自己封裝的,可以試着更改AndroidManifest.xml文件的一些屬性,更改主題(當然,app名字、app桌面圖標都可以在這裏改):
android:theme="@style/AppTheme"這句話就是app的主題,所謂主題,就是圖三。點擊跳轉到styles.xml文件(res/values/style.xml),更改AppTheme,可以查看不同(自己增加點color)。
//這是style.xml
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/blue</item>
<item name="colorPrimaryDark">@color/main_color</item>
<item name="colorAccent">@color/red</item>
</style>
//這是colors.xml
<color name="colorPrimary">#008577</color>
<color name="colorPrimaryDark">#00574B</color>
<color name="colorAccent">#D81B60</color>
<color name="yellow">#FFFF00</color>
<color name="blue">#834cb1</color>
<color name="white">#FFFFFF</color>
<color name="red">#E91010</color>
<color name="black">#353535</color>
<color name="main_color">#0065b4</color>
<color name="dividerColor">#dadada</color>
<color name="gray">#AAAAAA</color>
其實如果熟悉Framwork的話,應該知道,activity裏面實際上有個phoneWindow,裏面又有個decorView的,所以我們平時的setContentView()方法,知道放哪兒去了吧。
最後運行得到:
ToolBar
現在增加Material Design的ToolBar:修改activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<!--高度:actionBar的size-->
<!--主題爲深色系-->
<!--彈出框爲淺色系-->
<androidx.appcompat.widget.Toolbar
android:id="@+id/tool_bar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/main_color"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
至於爲什麼要這麼寫,註釋已經有了。關於那個@style,實際上就是style定義的資源,裏面的資源是可寫成<...,parent:...>,類似於繼承樣式的,具體可以自己研究。
Mainactivity裏面也要改一下,不然加進來的這個toolbar就只是個佈局view:
用Buttknife也好,自己用findviewbyid也好,隨便。運行得到效果:
標題欄太單調了?是的。再加吧,也可以自己定義view,然後佈局,加自己想要的,當然,這裏介紹的Material Design,那就用這種吧。
New-Menu resource file(在res-layout裏面,也可以自己建一個directory包,單獨放自己的menu,都是可以的)。這個menu就是自己找圖自己定義了。
MainActivity裏面修改(重寫父類某兩個函數):
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.search:
Toast.makeText(this, "搜索", Toast.LENGTH_SHORT).show();
break;
case R.id.setting:
Toast.makeText(this, "設置", Toast.LENGTH_SHORT).show();
break;
case R.id.add:
Toast.makeText(this, "添加", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return true;
}
運行結果:(可以根據需要在toolBar裏面增加返回按鍵,修改activity_main.xml,在toolbar裏面增加1,或者在MainActivity的oncreat裏面添加2)。
這裏爲了演示,效果圖太醜太醜,感覺會毀了人家公司。。。。(所以自定義ActionBar到BaseActivity的確也很完美)
//1
app:navigationIcon="@mipmap/title_bar_back"
//2
toolbar.setNavigationIcon(R.mipmap.back);