Toolbar拾遗

本次接着上篇《Toolbar的基本使用》,来点实战吧 ~

上篇文章遗留的问题,在下面的实战中会有具体体现,开始战斗吧 ~~

1. 网易云音乐

  • 来张演示gif先 ~

  • 开始,Toolbar使用前准备还记得吗?

    • 禁用ActionBar
    • 启用Toolbar
  • 接下来,在 activity_layout.xml 中添加 toolbar 元素

    <android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize">...
    </android.support.v7.widget.Toolbar>
    
  • 设置 Toolbar 背景色, colors.xml 中,我们设置的 colorPrimary 值为 #FFCE3D3A

    android:background="?attr/colorPrimary"
    
  • 添加 NavigationIcon

    app:navigationIcon="@drawable/ic_nav_main"
    
  • 设置不显示Title

    toolbar.setTitle("");//这里我使用的是这种方式,感觉不是很好
    
  • 添加 Custom Views

中间的三个图标,我使用的是 RadioButton 方式实现的

    <RadioGroupandroid:layout_gravity="center"       // 设置居中显示android:orientation="horizontal"      // 设置内部的RadioButton横向显示...><RadioButtonandroid:id="@+id/ib_disco"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:background="@drawable/ic_ib_disco"  // 设置背景图片,这里用到了selector哟android:button="@null"                      // 不显示RadioButton那个圆形按钮android:scaleX="0.8"                        // 设置背景图片的缩放比例 android:scaleY="0.8"  /><RadioButton                                    //三个RadioButton的样式设置是同样的android:id="@+id/ib_music".../><RadioButtonandroid:id="@+id/ib_friends".../></RadioGroup>

来看看背景图的drawable吧,selector是这样写的:

    <?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/ic_discover_checked"android:state_checked="true"/> <!-- checked --><item android:drawable="@drawable/ic_discover_normal"/> <!-- default --></selector>

旁白: RadioButton设置背景图片拉伸,样子丑陋,设置scaleX/Y属性进行美化

好蠢啊我,Google搜索 “radiobutton背景图片拉伸” 愣是找不到解决方案, 换成 “radiobutton background size” 就找到了,大概 stackflow 欺我四级没过,强制我使用英文吧!!

  • 最后,还有一个搜索按钮(Action Menu,你还记得吗?)

在 res 文件夹下新建 menu 文件夹,然后在 res/menu 文件夹下新建 menu_resource_file

它的内容是这样的:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><itemandroid:id="@+id/action_search"                              app:actionViewClass="android.support.v7.widget.SearchView"   // 注意前缀是appandroid:icon="@drawable/ic_action_search"                    android:title="@string/action_search"                        app:showAsAction="ifRoom|collapseActionView"/>
</menu>

是不是已经有些样子了 ~~ ,同样的,有躯体更要有灵魂,添加事件监听吧 ~

  • RadioButton的选中事件

实现 RadioGroup.OnCheckedChangedListener 即可

    public class MainActivity extends AppCompatActivityimplements RadioGroup.OnCheckedChangeListener {private RadioGroup mRadioGroup;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);...mRadioGroup = (RadioGroup) findViewById(R.id.rg_container);mRadioGroup.setOnCheckedChangeListener(this);//注意看这里,我们在这里设置默认状态下,第一个RadioButton被选中((RadioButton) mRadioGroup.getChildAt(0)).setChecked(true);         }@Overridepublic void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {switch (checkedId) {case R.id.rb_disco:...break;...}}}

运行看下,是不是感觉很棒,可以的,那NavigationIcon不用说了,关于 Action Views & Providers 还有 SearchView 因为可以单门做一个专题去写,就不多说,这里以一种简单的方式实现

  • SearchView的搜索文本事件

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.toolbar_action, menu);MenuItem searchItem = menu.findItem(R.id.action_search);mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);mSearchView.setSubmitButtonEnabled(true);// 这里是设置展开的搜索框中,搜索按钮的点击事件// 你看到的搜索按钮的样子是不是很尴尬,一个大于号 > ,没关系,那个图标可以通过反射的方式更改mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {@Overridepublic boolean onQueryTextSubmit(String query) {Toast.makeText(MainActivity.this, query, Toast.LENGTH_SHORT).show();return true;}@Overridepublic boolean onQueryTextChange(String newText) {...return true;}});return true;
    }
    

好吧,上面这个案例就到此结束吧,好像还有些东西没讲到,恩,继续(下面的例子就不一步步的写了,直接贴代码好了..)

2. 标题居中

  • 先看效果图

  • 实现思路,Toolbar中间位置,添加TextView,同时设置Title为空字符串,代码如下

    <android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="?attr/colorPrimary"app:navigationIcon="@drawable/ic_arrow_back"app:theme="@style/AppTheme.AppBarOverlay"><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"           // 不要忘记这里设置居中android:text="标题居中"   android:textColor="@android:color/white"android:textSize="20sp"/></android.support.v7.widget.Toolbar>
    

3. 新浪微博

  • 先看效果图 ~

  • 实现思路,Toolbar作为一个ViewGroup,那就往里面可劲添加子View吧(真的是这样子吗??),看代码

         <android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="?attr/colorPrimary"app:theme="@style/AppTheme.AppBarOverlay"><Buttonandroid:id="@+id/btn_add_friends"style="@style/Widget.AppCompat.Button.Borderless"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="start"                     //位置居左,和left效果相似android:text="添加好友"android:textColor="@android:color/white"android:textSize="16sp"/><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"                    //位置居中android:text="我"android:textColor="@android:color/white"android:textSize="20sp"/><Buttonandroid:id="@+id/btn_settings"style="@style/Widget.AppCompat.Button.Borderless"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="end"                        //位置居右,和right效果相似android:text="设置"android:textColor="@android:color/white"android:textSize="16sp"/></android.support.v7.widget.Toolbar>
    

哈,看似还挺简单哈,右侧的设置看到了吗?其实右侧的设置我们使用Action Menu就可以了 ~~,像下面这样:

    <?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@+id/action_settings"android:title="@string/action_settings"/></menu>

不过这里有一点就是 : Toolbar 样式,因为直接这样写,menu文字是黑色的,那么注意到,上面我写了这样一行代码

    app:theme="@style/AppTheme.AppBarOverlay"

设置 Toolbar的样式 ,那么这个 AppTheme.AppBarOverlay 又是什么鬼?

     <style name="AppTheme.AppBarOverlay" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar"></style>

嘿,基本什么都没配置,直接继承自 ThemeOverlay.AppCompat.Dark.ActionBar

style 标签中我们可以配置toolbar的相关样式,比如设置toolbar和menu文字的颜色:

    <item name="android:textColorPrimary">@color/...</item>

哈,什么,你怎么知道有这么个属性? Na,最直接的方式就是网上直接搜解决方案(很多时候结果并不满意!),比较好的方式我认为就是看API文档

嗯?篇幅似乎长了点,好吧,算是对Toolbar有些认识了吧,对于Toolbar右侧的操作或是图标或是文字,好像大都是Menu完成的,那么关于Menu,尤其是actionViewClass中我们自定义Action View实现一些效果,比方说一个Toolbar右侧刷新的图标,那我们点击的时候,这个图标有一个旋转的动画,另外还有一些PopupMenu相关内容,那么具体怎么实现呢?

嘿,等着把其他的写完,再开一个Menu专题吧!

本次就结束了,如果你有更好的建议或意见,欢迎关注左侧公众号oogh,后台留言,(公众号刚注册,没有原创,留言功能…)

Toolbar实战(来点小栗子...)相关推荐

  1. c语言 lookup函数怎么用_菜鸟记502用lookup和vlookup函数核对数据的一个小栗子

    欢迎转发扩散点在看 万一您身边的朋友用得着呢? 各位朋友早上好,小菜继续和您分享经验之谈,截止今日小菜已分享400+篇经验之谈,可以文章编号或关键词进行搜索. 微信推送规则发生改变,如果您想看到小菜每 ...

  2. 一个小栗子聊聊JAVA泛型基础

    背景 周五本该是愉快的,可是今天花了一个早上查问题,为什么要花一个早上?我把原因总结为两点: 日志信息严重丢失,茫茫代码毫无头绪. 对泛型的认识不够,导致代码出现了BUG. 第一个原因可以通过以后编码 ...

  3. web servieces 学习小栗子

    苦恼啊 公司总是派我出差一出就是一个月 总这么着日子过不下去啊 媳妇都怒了 催我赶紧找工作 这就得强化能力应付笔试面试 不扯了 web services 总听这个名词儿,但是还真是没深究,因为项目中也 ...

  4. Cocos Creator入门实战:桌球小游戏

    Cocos Creator入门实战:桌球小游戏 转载请保留原文链接:https://blog.csdn.net/zzx023/article/details/90035153 本篇主要是希望能够通过C ...

  5. HaaS EDU物联网项目实战:微信小程序实现云养花

    HaaS EDU K1是一款高颜值.高性能.高集成度的物联网开发板,板载功能强大的4核(双核300Mhz M33+双核1GHz A7)主芯片,2.4G/5G双频Wi-Fi,双模蓝牙(经典蓝牙/BLE) ...

  6. 前端实战小案例--canvas实战之FlappyBird小游戏

    前端实战小案例--canvas实战之FlappyBird小游戏 想练习更多前端案例,请进个人主页,点击前端实战案例->传送门 觉得不错的记得点个赞?支持一下我0.0!谢谢了! 不积跬步无以至千里 ...

  7. Pygame从0实战9(泡泡小游戏碰撞检测)

    1.Pygame从0实战8(泡泡小游戏碰撞检测) 1.自己实现碰撞检测 思路: Rect()对象center属性就是小球的圆心,那么两个Rect()对象(两个小球) center属性的距离和一个Rec ...

  8. Pygame从0实战10(泡泡小游戏添加音效)

    1.Pygame从0实战10(泡泡小游戏添加音效) 这节我们将如何在Pygame游戏中添加音效并且在上节未完成的泡泡游戏中 添加音效 下面是资源链接 点击打开链接 密码:hfjz 播放声音和音效 建议 ...

  9. Linux一键自动安装小栗子桌面 可以用来挂小栗子机器人

    Linux系统还是用7.6的吧,当然,你要用别的也没问题,这不是硬性要求 Linux系统对新手虽然不太友好(特别是我之前想挂机器人,就要弄个Windows系统的服务器或者挂机宝) 某天我看到网上分享出 ...

  10. Cocos Creator游戏引擎可以支持鼠标吗_Cocos Creator入门实战:桌球小游戏

    本文作者:BigBear 多年游戏行业研发经验 精通Unreal.CocosCreator游戏引擎 参与过多款手游.端游项目的研发 Cocos Creator入门实战:桌球小游戏 本篇主要是希望能够通 ...

最新文章

  1. Python基础教程:使用dict和set
  2. node+Mysql,数据库时区显示正确,查询时却显示另一个时区
  3. ajax请求, 前后端, 代码示例
  4. 我国物流业的国际比较及发展措施 (1)
  5. 李争——一个骨子里是极客的程序员
  6. 计算机基础应用形考5access答案,计算机应用基础形考作业五答案.doc
  7. 潜在语义分析(Latent Semantic Analysis,LSA)
  8. 平板电脑连接投影仪_交互式触控幼教白板如何与平板进行连接-微幼科技
  9. in最多可以放多少?_新手开店,放多少商品才能获取最多流量?
  10. 三调与二调图斑叠加分析,筛选不同地类面积占比,筛选举证图斑
  11. 计算机硬件组成框图,以及各部件的作用及计算机系统的主要技术指标概念理解
  12. HTML标签--换行标签与段落标签的区别对比
  13. Python 批量合并 Excel
  14. 云​大数据和计算技术周报(第43期)
  15. 生物药、创新药、仿制药新项目立项调研、评估的重要手段
  16. AutoJs+mitmproxy App爬虫
  17. 蓝桥 第八大奇迹 (线段树)
  18. Digg.com:投票的动力因素分析
  19. 【爬虫技能书】分享自用爬虫书籍,快进来看看!
  20. 粮食行业视频监控系统互联互通技术规范

热门文章

  1. anaconda 安装 scipy
  2. centos下配置samba及回收站及日志
  3. 换种方式实现阖家团圆,2022旗舰投影坚果J10S被种草
  4. 【软件测试】黑盒测试、白盒测试、静态测试
  5. 对ldd3 中jiq程序的一点笔记
  6. PHP 生成二维码保存数据库
  7. 调整JVM虚拟机内存大小
  8. vmware给ubuntu虚拟机扩容
  9. 微信小程序入门三之Flex布局
  10. 一:My Batis快速入门