
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 方法
Fragment是Android里面中一个非常灵巧的设计,它可以看做ui模块,由活动托管。熟练的使用它们能优雅的实现很复杂的界面,而且用它们编写UI界面,相对于用一个个Activity所消耗内存少得多,而且切换很流畅,可以参考知乎客户端。
但是,Fragment使用过程中会出现一些小问题,这里讲如何在Fragment中添加menu。我们都知道在活动中添加menu只用编写好menu,在onCreateOptionsMenu中加载,并在onOptionsItemSelected中处理点击事件就可以了,按照这个流程先试下
首先编写menu.xml
这里只添加一个设置的menu item
然后要加载menu需要toolbar或actionbar,这里分两种情况:
然后再调用onCreateOptionsMenu加载到toolbar上
运行一下,你会发现两种情况下menu都没加载出来。原来要在fragment中加载menu还需在其onCreate中加一句 setHasOptionsMenu(true),用于让活动知道有menu要加载
现在menu加载出来了
然后重写onOptionsItemSelected处理点击事件
现在就大功告成了吗,然而运行后会发现无论怎么点击onOptionsItemSelected都没被调用。可以再android training中找到原因
http://developer.android.com/guide/topics/ui/actionbar.html
也就是说在虽然在fragment中重写onOptionsItemSelected,但系统会在activity中先调用onOptionsItemSelected,而活动中默认都消耗了点击事件,fragment中因此无法处理点击。所以要先在托管碎片的活动中讲frament中处理的menu item返回false,让点击事件能穿到fragment的onOptionsItemSelected中
总结下
要在fragment添加menu需要以下步骤:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)