布局參數(shù)的使用:
一前塔、Toolbar的基本用例
- mToolBar.setNavigationOnclickListener(); //用于設(shè)置左上角導(dǎo)航圖標(biāo)的點(diǎn)擊事件
- mToolbar.inflateMenu(R.menu.toolbar_menu); // 右邊menu數(shù)據(jù)
- mToolbar.setOnMenuItemClickListener(); // 點(diǎn)擊菜單item的響應(yīng)事件
- 注意:
- 使用時(shí)候需要修改為無actionBar主題,否則會出現(xiàn)問題;
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
- 必須使用V7包下的Toolbar,同時(shí)繼承支持Toolbar的AppCompatActivity,否則可能如setSupportActionBar方法可能使用不了。
<android.support.v7.widget.Toolbar
android:id="@+id/tool_bar"
android:layout_width="match_parent"
android:layout_height="100dp"
android:minHeight="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:gravity="center_horizontal"
android:theme="@style/AlertDialog.AppCompat.Light"
app:logo="@mipmap/ic_launcher" //圖標(biāo)
app:navigationIcon="@drawable/arrow_back_black_18x18" //左上角導(dǎo)航圖標(biāo)顏色
app:popupTheme="@style/toolBar_pop_item"
app:subtitle="副標(biāo)題" //副標(biāo)題
app:subtitleTextColor="#fff" //副標(biāo)題顏色
app:title="標(biāo)題" //標(biāo)題
app:titleTextColor="#fff" //標(biāo)題顏色/>
<!--toolBar_pop_item--> //pop樣式
<style name="toolBar_pop_item" parent="Base.Theme.AppCompat.Light">
<item name="android:textColor">@color/colorAccent</item>
</style>
<!--R.menu.toolbar_menu-->
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_setting"
android:icon="@android:drawable/ic_menu_search"
android:orderInCategory="100"
android:title="測試1"
app:showAsAction="ifRoom" /> //如果有空間就在toolbar上顯示處理
<item
android:id="@+id/action_notify"
android:icon="@android:drawable/ic_lock_power_off"
android:orderInCategory="100"
android:title="測試2"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_search"
android:icon="@android:drawable/ic_menu_search"
android:orderInCategory="100"
android:title="設(shè)置"
app:showAsAction="never" /> //以menu菜單的形式展現(xiàn)
<item
android:id="@+id/action_search2"
android:icon="@android:drawable/ic_menu_search"
android:orderInCategory="100"
android:title="關(guān)于"
app:showAsAction="always" /> //表示永遠(yuǎn)顯示在Toolbar中,如果屏幕空間不夠則不顯示
</menu>
二、Toolbar的特殊用法
由于有些經(jīng)常性的需求如標(biāo)題在中間,可以在Toolbar中添加控件吐辙,這時(shí)候可以認(rèn)為是一個(gè)Framlayout,在控件中添加屬性layout_gravite 即可蘸劈。左右兩邊如果有特殊需求也能如此處理昏苏。
三、Toolbar與一些控件的配合使用(CoordinatorLayout+appbarLayout+collapsedToolbarLayout +toolbar)
1.appBarLayout使用(AppBarLayout實(shí)現(xiàn)相關(guān)效果必須依賴于CoordinatorLayout(協(xié)調(diào)者布局)使用)
參數(shù)scrollFlags(該屬性是給AppBarLayout的子view使用)
- scroll: 添加該屬性后威沫,該子view會隨著scrollview滑動(dòng)而滑動(dòng)
- enterAlways:配合scrollview使用贤惯,下拉時(shí)候,appBarLayout中的子view先回到滑動(dòng)到可視區(qū)棒掠,然后繼續(xù)下方scrollview才開始滾動(dòng)
- enterAlwyasCollapsed:enterAlaways的補(bǔ)充使用孵构,該方法要配合min_height使用,下拉時(shí)候烟很,appBarLayout中子view先下滑到最小高度颈墅,當(dāng)繼續(xù)下拉,scrollview滑動(dòng)頂點(diǎn)雾袱,再次下拉到子view最大寬度
- exitUnitlCollapsed:用于上滑該子view滑出屏幕的效果恤筛,也需要配合min_height使用,子view先上滑至最小寬度芹橡,便不再向上滑動(dòng)
- snap:彈性顯示子view,添加該參數(shù)后會到達(dá)上面參數(shù)的極限情況毒坛,滑動(dòng)超過一定比率就滑動(dòng)上面四個(gè)參數(shù)產(chǎn)生效果的極限情況
- 注意:
- enterAlways,enterAlwaysCollapsed,exitUnitlCollapsed,snap必須在scoll前提下才能使用
- enterAlwaysCollapsed必須有enterAlways參數(shù)才能產(chǎn)生效果
- enterAlways,包括enterAlwaysCollapsed和exitUnitlCollapsed最好不要同時(shí)使用會出現(xiàn)滑動(dòng)異常
2.AppBarLayout實(shí)現(xiàn)tab吸頂效果用例
注意:
- 吸頂?shù)目丶灰欢ㄊ褂胻abLayout林说,可以是viewGroup包裹的自定義tab粘驰,也可以是其他控件屡谐,不能添加scroll_flags,如果添加會產(chǎn)生跟隨滑動(dòng)
- appbarLayout下方的控件必須使用如NestScrollview蝌数,Recyclerview等材料設(shè)計(jì)控件,并且添加app:layout_behavior="@string/appbar_scrolling_view_behavior"參數(shù)
- 如果在NestScrollview中加入的是viewpager度秘,需要在NestScrollview中添加 android:fillViewport="true" 否則viewpager內(nèi)容是不會顯示的可參考 ScrollView 嵌套 ViewPager 不顯示
<?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">
<android.support.v7.widget.Toolbar
android:id="@+id/tool_bar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:gravity="center_horizontal"
android:minHeight="?attr/actionBarSize"
android:theme="@style/AlertDialog.AppCompat.Light"
app:logo="@mipmap/ic_launcher"
app:navigationIcon="@drawable/arrow_back_black_18x18"
app:popupTheme="@style/toolBar_pop_item"
app:subtitle="副標(biāo)題"
app:subtitleTextColor="#fff"
app:title="標(biāo)題"
app:titleTextColor="#fff" />
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".CoordinatorActivity">
<!--toolbar必須放在AppbarLayout中構(gòu)成響應(yīng)滾動(dòng)事件-->
<!--appbar必須使協(xié)調(diào)者布局中的直接子view-->
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- 需要跟隨滾動(dòng)的控件顶伞,必須加入scroll_flags-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="@color/colorPrimaryDark"
app:layout_scrollFlags="scroll|snap|enterAlways" />
<!-- 實(shí)現(xiàn)吸頂?shù)目丶@個(gè)控件可以是tabLayout剑梳,也可以是其他自定義的tab控件 -->
<TableLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/colorAccent">
</TableLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>
</LinearLayout>
3.CollapsingToolbarLayout相關(guān)使用
定義:用于包裝ToolBar,實(shí)現(xiàn)折疊應(yīng)用程序欄唆貌,作為AppBarLayout的直接子view使用
1. 折疊式標(biāo)題,需要在CollapsingToolbarLayout中添加app:layout_scrollFlags="scroll|exitUntilCollapsed"垢乙,scroll是用于跟隨滑動(dòng)锨咙,extitUntilCollapsed用于標(biāo)題欄折疊時(shí)候不至于全部滑動(dòng)上去,此時(shí)collapsingToolBarLayout要設(shè)置固定高度追逮,不能使用 wrap_layout酪刀。
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<!--scrollFlags必須為exitUntilCollapsed,固定一個(gè)大于Toolbar的高度,否則沒有折疊效果-->
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/ctl"
android:layout_width="match_parent"
android:layout_height="200dp" //固定高度钮孵,使用wrap_layout無法達(dá)到效果
app:layout_scrollFlags="scroll|exitUntilCollapsed" //這兩個(gè)參數(shù)必須設(shè)置
app:title="這是標(biāo)題">
<android.support.v7.widget.Toolbar
android:id="@+id/tool_bar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:background="@color/colorAccent"
android:gravity="center_horizontal"
android:minHeight="?attr/actionBarSize"
app:logo="@mipmap/ic_launcher"
app:navigationIcon="@drawable/arrow_back_black_18x18"
app:popupTheme="@style/toolBar_pop_item"
app:subtitle="副標(biāo)題"
app:subtitleTextColor="#fff"
app:title="標(biāo)題"
app:titleTextColor="#fff" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
出現(xiàn)的問題
- collapsingToolbarLayout中的標(biāo)題和Toolbar中的標(biāo)題取舍問題骂倘,如果要使用toolbar中的標(biāo)題應(yīng)該設(shè)置就要么不在xml設(shè)置collapsingToolbarLayout的標(biāo)題,要么在代碼中設(shè)置標(biāo)題為空巴席,一旦賦了標(biāo)題历涝,那么就會以collapsingToolbarLayout中標(biāo)題為主
- Toolbar并沒有固定在標(biāo)題上(紅色背景),而是向上滑動(dòng)到屏幕外了漾唉,如果要固定Toolbar不移動(dòng)荧库,應(yīng)該使用的方法是layout_collapseMOde = "pin"(放在Toolabar的xml中) ,這樣toolbar就固定在標(biāo)題欄位置不會向上滑動(dòng)了赵刑。
2.contentScrim和statusBarScrim(CollapsingToolbarLayout中)
- contentScrim用于CollapsingToolbarLayout折疊后顯示的顏色(默認(rèn)為colorPrimary)
- statusBarScrim是折疊后狀態(tài)欄顯示的顏色(默認(rèn)為colorPrimaryDark)分衫,如果要使用該資源值必須在代碼中調(diào)用
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);否則不會出現(xiàn)任何效果
<!--toolbar必須放在AppbarLayout中構(gòu)成響應(yīng)滾動(dòng)事件-->
<!--appbar必須使協(xié)調(diào)者布局中的直接子view-->
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<!--scrollFlags必須為exitUntilCollapsed,固定一個(gè)大于Toolbar的高度,否則沒有折疊效果-->
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/ctl"
android:layout_width="match_parent"
android:layout_height="200dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:contentScrim="@android:color/holo_red_dark" //折疊后標(biāo)題欄顯示顏色
app:statusBarScrim="@color/design_default_color_primary" //折疊后狀態(tài)欄顯示顏色
app:title="">
<android.support.v7.widget.Toolbar
android:id="@+id/tool_bar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:background="@color/colorAccent"
android:gravity="center_horizontal"
android:minHeight="?attr/actionBarSize"
app:logo="@mipmap/ic_launcher"
app:navigationIcon="@drawable/arrow_back_black_18x18"
app:popupTheme="@style/toolBar_pop_item"
app:subtitle="副標(biāo)題"
app:layout_collapseMode="pin"
app:subtitleTextColor="#fff"
app:title="標(biāo)題"
app:titleTextColor="#fff" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
3.添加圖片背景料睛,實(shí)現(xiàn)展開圖片丐箩,折疊標(biāo)題欄效果
利用layout_collapseMode = "parallax"添加在圖片或者其他控件中,這樣就完成了可折疊的效果恤煞,由于CollapsingToolabarLayout相當(dāng)于Framelayout所以圖片控件應(yīng)放在Toolbar的上方屎勘,同時(shí)為了防止Toolbar的背景覆蓋圖片,應(yīng)設(shè)置背景為透明居扒。同時(shí)應(yīng)該給折疊后的標(biāo)題設(shè)置contetnScrim否則圖片折疊不會被覆蓋概漱。
<!--toolbar必須放在AppbarLayout中構(gòu)成響應(yīng)滾動(dòng)事件-->
<!--appbar必須使協(xié)調(diào)者布局中的直接子view-->
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<!--scrollFlags必須為exitUntilCollapsed,固定一個(gè)大于Toolbar的高度,否則沒有折疊效果-->
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/ctl"
android:layout_width="match_parent"
android:layout_height="200dp"
app:contentScrim="@color/colorAccent"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:src="@drawable/timg"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.7" />
<android.support.v7.widget.Toolbar
android:id="@+id/tool_bar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@android:color/transparent"
android:gravity="center_horizontal"
app:layout_collapseMode="pin"
app:navigationIcon="@drawable/arrow_back_black_18x18"
app:popupTheme="@style/toolBar_pop_item"
app:subtitle="副標(biāo)題"
app:subtitleTextColor="@color/white"
app:title="標(biāo)題"
app:titleTextColor="@color/white" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
注意
- 在xml設(shè)置標(biāo)題顏色會導(dǎo)致無法生效喜喂,必須在代碼中進(jìn)行添加collapsingToolbarLayout.setCollapsedTitleTextColor();collapsingToolbarLayout.setExpandedTitleColor()
- layout_collapseMode = 'pin' 用于固定瓤摧,不隨滑動(dòng)竿裂,可以用于Toolar的固定
- layout_collapseMode = "parallax" 圖片或者布局的折疊,其中跟隨一個(gè)屬性為layout_collapseParallaxMultiplier = "0-1"照弥,為0時(shí)候腻异,圖片跟隨滑動(dòng),滑出視野这揣,為1.0時(shí)候悔常,圖片固定下面內(nèi)容覆蓋圖片,為0.5给赞,圖片既向上滑動(dòng)机打,下面內(nèi)容向上覆蓋,并且速度一致片迅,就像電視關(guān)機(jī)上下邊緣同時(shí)變黑残邀,并向中間移動(dòng)。公式為 下半部分高度 / 視圖總高度 = (0.0 - 1.0 ) 取值范圍是 0.0 - 1.0