免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1327 | 回复: 0

[Android] Andorid之官方导航栏Toobar(转) [复制链接]

论坛徽章:
0
发表于 2015-06-02 11:06 |显示全部楼层
本帖最后由 nighteagle 于 2015-06-02 11:09 编辑

在前面学习使用ActionBar的时候,我们就发现ActionBar中有些方法被标记为过时了,原来在android5.0之后,google推出了一个新的导航工具栏,官方将其定义为:A standard toolbar for use within application content.使用Toolbar将会比ActionBar更加有弹性,更加灵活。

  老规矩,先看Toolbar效果图:
1.png

下面,我们一起看看,如何使用Toolbar。由于Toolbar是android5.0之后新增的,要想在低版本中使用,需要添加Support v7,确保下载最新的v7支持包。和ActionBar不同,ActionBar是作为Activity窗口的一部分而存在,而Toolbar实际就是继承ViewGroup,可以直接在布局文件中使用,非常的灵活。
2.png
先看布局文件activity_main.xml的Toolbar:
  1. <android.support.v7.widget.Toolbar
  2.         android:id="@+id/toolbar"
  3.         android:layout_width="match_parent"
  4.         android:layout_height="wrap_content"
  5.         android:background="?attr/colorPrimary"
  6.         android:minHeight="?attr/actionBarSize">
  7. </android.support.v7.widget.Toolbar>
复制代码
注意Toolbar是v7下的Toolbar,本布局文件的根布局是一个RelativeLayout,默认情况下有padding,需要将padding去掉,不然Toolbar和窗口会有间隔。

  在MainActivity中,只需要toolbar = (Toolbar)findViewById(R.id.toolbar);即可得到Toolbar,不做任何操作,运行后效果如图:
3.png

Toolbar和ActionBar并不是孤立的,没有联系的,通过调用setSupportActionBar方法,可以使Toolbar支持ActionBar,设置后Toolbar可以向Actionbar一样使用。根据文档,一个Toolbar中可包含如下几部分:
  1. 1、A navigation Button:导航按钮,可以是一个up arrow、navigoation menu toggle等等。

  2. 2、A branded logo image:Logo图片。

  3. 3、A title and subtitle:标题和子标题

  4. 4、One or more custom views:自定义视图。

  5. 5、An action menu:菜单
复制代码
通过如下代码,可实现对以上几个部分的设置,同时要注意Activity要继承AppCompatActivity:
  1. public void onClick(View view) {
  2.         switch (view.getId()){
  3.             case R.id.btn_navigation:
  4.                 toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
  5.                 break;
  6.             case R.id.btn_Logo:
  7.                 toolbar.setLogo(R.drawable.jredu_logo);
  8.                 break;
  9.             case R.id.btn_title:
  10.                 toolbar.setTitle("杰瑞教育");
  11.                 break;
  12.             case R.id.btn_subtitle:
  13.                 toolbar.setSubtitle("专注IT教育");
  14.                 break;
  15.             case R.id.custom_view:
  16.                 startActivity(new Intent(this,CustomToolBarActivity.class));
  17.                 break;
  18.             case R.id.btn_menu:
  19.                 //使用toolbar的inflate方法加载menu,通过setOnMenuItemClickListener设置菜单的点击处理
  20.                 toolbar.inflateMenu(R.menu.menu_main);
  21.                 toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
  22.                     @Override
  23.                     public boolean onMenuItemClick(MenuItem menuItem) {
  24.                         Toast.makeText(MainActivity.this,"你选择了菜单!",Toast.LENGTH_SHORT).show();
  25.                         return true;
  26.                     }
  27.                 });
  28.                 break;
  29.             case R.id.btn_support_actionbar:
  30.                 setSupportActionBar(toolbar);
  31.                 break;
  32.             default:
  33.                 break;
  34.         }
  35. }
复制代码
至此,我们完成了大部分的编码工作,是不是可以运行起来查看效果了呢?别急,还有非常重要的一步,那就是隐藏ActionBar,在这里我们可以通过修改主题来实现,有如下两种方式:
  1. 1、 主题继承Theme.AppCompat.Light.NoActionBar

  2. 2、 主题继承Theme.AppCompat.Light.DarkActionBar,并设置如下属性:

  3. <item name="windowActionBar">false</item>

  4. <item name="windowNoTitle">true</item>
复制代码
到此,可运行查看查看效果图:
4.png

很显然,我们需要自定义样式来美化我们的Toolbar,下面我们再实现一个Activity来体现Toolbar的灵活性和样式的定义。

  布局文件custom_layout.xml如下:
  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.         xmlns:app="http://schemas.android.com/apk/res/com.example.myapplication"
  7.         android:id="@+id/top_bar"
  8.         android:layout_width="match_parent"
  9.         android:layout_height="wrap_content"
  10.         android:background="?attr/colorPrimary"
  11.         android:minHeight="?attr/actionBarSize"
  12.         app:titleTextAppearance="@style/CustomTitleTextAppearance">
  13.     </android.support.v7.widget.Toolbar>

  14.     <android.support.v7.widget.Toolbar
  15.         xmlns:app="http://schemas.android.com/apk/res/com.example.myapplication"
  16.         android:id="@+id/bottom_bar"
  17.         android:layout_width="match_parent"
  18.         android:layout_height="wrap_content"
  19.         android:layout_alignParentBottom="true"
  20.         app:title="课程"
  21.         app:titleTextAppearance="@style/CustomTitleTextAppearance"
  22.         android:background="#454545"
  23.         android:contentInsetStart="5dp">

  24.         <Spinner
  25.             android:layout_width="wrap_content"
  26.             android:layout_height="wrap_content"
  27.             android:id="@+id/coursetype"/>
  28.     </android.support.v7.widget.Toolbar>
  29. </RelativeLayout>
复制代码
在这个布局文件里面,我们放置了两个Toolbar,top_bar和bottom_bar,之前我们说过Toolbar其实就是一个ViewGroup,所以我们可以直接在里面进行布局,同时为Toobar设置了属性,其中titleTextAppearance用来设置Toolbar中的标题文字的样式,CustomStyle中的colorPrimary用于定义Toolbar的背景,具体如下:
  1. <style name="CustomTitleTextAppearance">
  2.         <item name="android:textColor">#fff</item>
  3.         <item name="android:textSize">20sp</item>
  4.     </style>
  5.     <style name="CustomStyle" parent="Theme.AppCompat.Light.DarkActionBar">
  6.         <!--去掉actionbar-->
  7.         <item name="windowActionBar">false</item>
  8.         <item name="windowNoTitle">true</item>
  9.         <item name="colorPrimary">#1570A6</item>
  10.         <item name="colorPrimaryDark">#454545</item>
  11.         <item name="colorAccent">#F48309</item>
  12.     </style>
复制代码
尚有许多样式属性,在此不多做介绍,可自行查看,都不复杂。

  在bottom_bar中我们放置了一个spinner,那该如何使用呢?很简单,以前怎么用现在就怎么用。CustomToolBarActivity中相关代码如下:
  1. bottomBar = (Toolbar)findViewById(R.id.bottom_bar);
  2.   bottomBar.inflateMenu(R.menu.bottom_menu);
  3.   spinner = (Spinner)findViewById(R.id.coursetype);
  4.         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
  5.                 android.R.layout.simple_dropdown_item_1line,
  6.                 new String[]{"Java","Android","IOS","动画","电商"});
  7.   spinner.setAdapter(adapter);
复制代码
效果如下:
5.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP