Android Toolbar的详细使用步骤

Android Toolbar的详细使用步骤,第1张

1.首先在 build.gradle 引入support v7包

2.找到 Manifest 文件的 Application 标签下 Theme 属性

3.自定义 Theme 属性,因为 Activity 默认是有 ActionBar 的,所以需要先将默认的 ActionBar 去掉( parent="Theme.AppCompat.Light.NoActionBar" ),并根据项目需求选择主题的每个特定的属性

附录一张常用属性图,上面的每个属性就很好理解了。

1.先在需要添加 Toolbar 的 xml 文件中,加入 Toolbar 控件

解释一下 Toolbar 里面的属性,这里面的属性大多见名知意,很好理解。

我们发现 Toolbar 里面有三个属性是以 app 作为前缀,因为 Toolbar 在 5.0 系统才出现,以 app 为前缀名的属性是为了兼容 5.0 以下的系统 。

咱们一个个分析,先讲下这个属性

这个根据项目需求,我们自定义的 Toolbar 属性。关键点:因为我们 App 的主题是浅色的主题 "Theme.AppCompat.Light.NoActionBar" ,所以 Toolbar 中,我们继承了 parent="ThemeOverlay.AppCompat.Dark.ActionBar" , 如果 Toolbar 不用深色的主题,标题栏的字体之类看不清楚。

见名知意,这是 PopWindow 的主题,由于我们 ActionBar 设置的是深色的,默认情况下, PopWindow 和 ActionBar 的主题是统一的,但 PopWindow 的深色主题和整个 App 的整体颜色风格太不搭,所以我们需要将主题改成和 App 风格一致。

以上属性都是根据项目需求设定的,可加可不加, Toolbar 的可定制性很强~

这样我们就做到了,隐藏 ActionBar,使用 Toolbar 了。 注意:标题栏是默认在左上角的,并没有居中

1.先自定义标题栏,让标题居中

2.在 Toolbar 上添加几个按钮,先在 res 目录下新建一个文件夹: Menu ,创建一个 toolbar_menu.xml 文件

在MainActivity 重写 onCreateOptionsMenu 、onOptionsItemSelected 方法

效果一:使Toolbar随着内容区域的滚动而隐藏和显示

我们知道手机屏幕的大小时候限的,有时候我们为了显示更多的内容需要隐藏掉一些不相关的内容,比如Toolbar。以前我们可能会使用属性动画或者通过view.animate().translationXX()这个便捷的方法来实现这些效果。现在就不用这么麻烦了,只需要在xml中添加两行代码就可以了。

为了实现上述的效果,这里需要引入两个新的控件:CoordinatorLayout和AppBarLayout,这两个控件均位于design兼容包中。所以你需要在module的build.gradle依赖中加入下面一行代码。

compile 'com.android.support:design:23.1.0'

AppBarLayout:本质上是一个垂直的线性布局。但是他实现了材料设计中app bar的滚动手势的特性。而为了让这些特性发挥效果,你必须把AppBarLayout作为CoordinatorLayout的一个直接子控件来使用。并且,你还需要为AppBarLayout设置一个支持NestedScroll的兄弟控件。这样父控件CoordinateLayout就知道什么时候来响应滚动事件了 它的子控件可以通过setScrollFlags(int)或者app:layout_scrollFlags的方式来为自己指定滚动行为。可选的行为有:SCROLL_FLAG_ENTER_ALWAYS、SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED、SCROLL_FLAG_EXIT_UNTIL_COLLAPSED、SCROLL_FLAG_SCROLL、SCROLL_FLAG_SNAP。

CoordinateLayout:本质上是一个增强版的FrameLayout。一般作为一个容器来使用,这样可以让它的子控件实现一些交互效果。可以通过给子控件指定不同的Behaviors来实现不同的交互效果。

扯了这么多好像也没啥感觉,感觉还真是“Talk is cheap. Show me the code.”呢。那下来就撸代码,看效果吧。

<?xml version="1.0" encoding="utf-8"?>

<android.support.design.widget.CoordinatorLayout 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:fitsSystemWindows="true"

tools:context="com.demo.activity.MainActivity">

<android.support.design.widget.AppBarLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:theme="@style/AppTheme.AppBarOverlay">

<android.support.v7.widget.Toolbar

android:id="@+id/toolbar"

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize"

android:background="?attr/colorPrimary"

app:layout_scrollFlags="scroll|enterAlways"

app:popupTheme="@style/AppTheme.PopupOverlay"/>

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

<android.support.v7.widget.RecyclerView

android:id="@+id/recycler_view"

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:layout_behavior="@string/appbar_scrolling_view_behavior" />

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

上面的布局中有两个地方需要注意:1.Toolbar的app:layout_scrollFlags="scroll|enterAlways"属性 2.RecyclerView的app:layout_behavior="@string/appbar_scrolling_view_behavior"属性。这两个地方就是上文中加粗部分的提到的注意点。同时,注意下整个布局的结构:CoordinateLayout作为跟布局,内部分别放置了一个AppBarLayout和RecyclerView。Toolbar作为AppBarLayout的子控件而存在。

其实,就改这么点地方就可以了。想要的效果已经有了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11638917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存