Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 148|回复: 0

[默认分类] Android之toolbar的使用

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-5-30 12:53:17 | 显示全部楼层 |阅读模式




    Android在5.0的时候已经淘汰了ActionBar,取而代之的是叫做toolbar的东西,toolbar类似于一个控件,放在layout文件中,可以在layout文件中直接添加属性,也可以在代码findviewbyid之后设置属性,并且可以在toolbar的XML文件中添加别的TextView或者ImageView等控件,使用非常的灵活,可以说和一个布局文件没什么区别,为了兼容低版本的机型,现已加入V7兼容包,使用Toolbar必须要去掉ActionBar,不然会造成Toolbar在ActionBar的下面,然后使用setsupportActionBar(toolBar),ok,下面就来动手操作吧~~~~·
    前期准备:
    1、去掉ActionBar
    2、在style文件中给Toolbar设置背景色
    去掉ActionBar:在values文件夹中的style.xml文件中,设置主题为:Theme.AppCompat.Light.NoActionBar.
    Toolbar设置颜色:在values文件夹中的style.xml文件中,添加item,来看看toolbar的布局分类


    item中name表示的意思:
    android:colorPrimary:给ActionBar设置颜色,如果要给toolbar设置颜色需要到layout文件中设置background属性。

    android:colorPrimaryDark:给状态栏设置颜色。

    android:textColorPrimary:toolbar中字体颜色。

    colorAccent:toolbar中如果有可以选择的控件,比如radiobutton等,设置选择后的颜色。
    准备工作完成后就是正式的使用了,先在Activity的布局文件中定义toolbar
      
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3.     android:layout_width="match_parent"
    4.     android:layout_height="match_parent">
    5.     <android.support.v7.widget.Toolbar
    6.         android:id="@+id/toolBar"
    7.         android:background="#987"
    8.         android:layout_width="match_parent"
    9.         android:layout_height="wrap_content">
    10.     </android.support.v7.widget.Toolbar>
    11. </RelativeLayout>
    复制代码


    在代码中:
      
      
    1. @Override
    2.     protected void onCreate(Bundle savedInstanceState) {
    3.         super.onCreate(savedInstanceState);
    4.         setContentView(R.layout.activity_main);
    5.         toolbar= (Toolbar) findViewById(R.id.toolBar);
    6.         toolbar.setLogo(R.mipmap.ic_launcher);
    7.         setSupportActionBar(toolbar);
    8.     }
    复制代码


    style文件:
      
      
    1. <resources>
    2.     <!-- Base application theme. -->
    3.     <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    4.         <item name="android:colorPrimary">@color/colorPrimary</item>
    5.         <item name="android:colorPrimaryDark">@color/colorPrimaryDark</item>
    6.         <item name="colorAccent">@color/colorAccent</item>
    7.        <item name="android:textColorPrimary">#f00</item>
    8.     </style>
    9. </resources>
    复制代码


    完成这些之后看下效果
      




    是不是有点丑呢??界面也够简单的,没关系,反正效果是出来了,下面我们就来对其进行美化。美化后的效果


    额,还是有点丑~~~~~,图片资源难找,凑合着看吧~~~~~~~~~~,加了一个Navigation和一个title还有一个menu,还记得ActionBar上面有个Menu创建方法和点击事件处理方法吗??没错,它们也可以用在toolbar上面,不需要任何改动,请看:
      
    1. //创建Menu
    2.     @Override
    3.     public boolean onCreateOptionsMenu(Menu menu) {
    4.         getMenuInflater().inflate(R.menu.main, menu);
    5.         return super.onCreateOptionsMenu(menu);
    6.     }
    7. //menu项的点击事件
    8.     @Override
    9.     public boolean onOptionsItemSelected(MenuItem item) {
    10.         switch (item.getItemId()) {
    11.             case android.R.id.home:
    12.                 Toast.makeText(MainActivity.this, "home", Toast.LENGTH_LONG).show();
    13.                 return true;
    14.             case R.id.action_settings:
    15.                 Toast.makeText(MainActivity.this, "action_settings", Toast.LENGTH_LONG).show();
    16.                 return true;
    17.         }
    18.         return super.onOptionsItemSelected(item);
    19.     }
    复制代码


    另外toolbar也新设置了一个方法取代上面的点击处理方法:
      
    1. toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
    2.     @Override
    3.     public boolean onMenuItemClick(MenuItem item) {
    4.         switch (item.getItemId()){
    5.             case android.R.id.home:
    6.                 Toast.makeText(MainActivity.this,"home",Toast.LENGTH_LONG).show();
    7.                 return true;
    8.             case R.id.action_settings:
    9.                 Toast.makeText(MainActivity.this,"action_settings",Toast.LENGTH_LONG).show();
    10.                 return true;
    11.         }
    12.         return false;
    13.     }
    14. });
    复制代码
    注:我使用这个方法的时候碰到一个问题就是第一个case没有执行,不知道为什么~~~~~~~·
      


    总结:
    其实toolbar总共分为4个部分:,第一个为导航图片,和ActionBar是一样的,第二个是一个Logo图标,第三个地方用来防止标题(可以同时放置一个主标题和一个副标题),第四部分就是menu的显示区域了,和actionBar是一样的。
    感觉toolbar和actionbar的使用基本是一样的,除了比较灵活一点外,什么???你还没感觉到那里比较灵活???下面我来演示一个例子,将第三个部分显示title的地方用一个TextView来显示标题,哈哈这个actionbar做不到吧,下面来看怎么弄,先来到layout布局文件中找到toolbar控件的定义,修改为下面这种形式:
      
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3.     android:layout_width="match_parent"
    4.     android:layout_height="match_parent">
    5.     <android.support.v7.widget.Toolbar
    6.         android:id="@+id/toolBar"
    7.         android:layout_width="match_parent"
    8.         android:layout_height="wrap_content"
    9.         android:background="#1c8049"
    10.         android:gravity="center">
    11.         <TextView
    12.             android:layout_width="wrap_content"
    13.             android:layout_height="wrap_content"
    14.             android:textSize="15sp"
    15.             android:text="TextView现实的标题" />
    16.     </android.support.v7.widget.Toolbar>
    17. </RelativeLayout>
    复制代码
    看效果图:
      

    扫描关注我的微信公众号:





    我这里只是给大家抛砖引玉,只要大家把toolbar当做一个控件来使用,我想你们一定会做出非常精美的toolbar出来~~~~~ok,就说到里吧,呼呼~每天写博客好累~~~~~~~~~·最后附上Demo:demo下载


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-4-19 17:22 , Processed in 0.341776 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表