Android 5.0(L) ToolBar(替代ActionBar) 实战(一)

来源:互联网 发布:华为云计算部门年终奖 编辑:程序博客网 时间:2024/05/16 18:03

Android 5.0 SDK 在悄然发布了,由于更新了Appcombat V7库,将Google在IO 2014时提到的Material Design的UI界面元素带了进来。从此,开发者可以创建基于Material Design界面设计的APP了。

诚然,在更新了新版SDK并引入新的Appcombat库后,发现之前的ActionBar的很多方法已经标记为不建议(Deprecated)的了。经过反复摸索,得知需要用ToolBar来代替古老的ActionBar。

那么ToolBar与传统ActionBar相比,有何优越性呢?简单来说:多样、自由。下面来一起看看ToolBar的使用。

首先,我们来新建一个项目

            


为了更好的兼容之前的版本,因此依旧将最低兼容的Android版本设置为2.2。其他保持默认,一路下一步,然后完成。

为了方便开发者,在新建项目的时候Eclipse依然是自动引入了Appcombar库。如果这个时候代码报错,则要看看这个库的引入状况,并且检查一下是否作为Library被导入到新的项目中了。

一切就绪的话,进入AndroidMenifest.xml,将ActionBar彻底废掉。废掉老旧的ActionBar的方法十分简单,将application下android:theme元素替换为:@style/Theme.AppCompat.NoActionBar就可以了。当然,下面的activity中切记不要再使用带有ActionBar的主题样式了,否则会报错的。另外,android:label对于Toolbar而言,也没有必要存在了,当然,即使存在这个字段是不会报错的。下面放上整个xml的例子:

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.xwh.toolbardemo"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="8"  
  9.         android:targetSdkVersion="21" />  
  10.   
  11.     <application  
  12.         android:allowBackup="true"  
  13.         android:icon="@drawable/ic_launcher"  
  14.         android:label="@string/app_name"  
  15.         android:theme="@style/Theme.AppCompat.NoActionBar" >  
  16.         <activity  
  17.             android:name=".MainActivity"  
  18.             android:label="@string/app_name" >  
  19.             <intent-filter>  
  20.                 <action android:name="android.intent.action.MAIN" />  
  21.   
  22.                 <category android:name="android.intent.category.LAUNCHER" />  
  23.             </intent-filter>  
  24.         </activity>  
  25.     </application>  
  26.   
  27. </manifest>  

下面我们来到MainActivity的布局文件:activity_main.xml。如果你的SDK已经更新为最新而且此项目也是配置为5.0的编译状态下时,在布局预览视图中将会如下所示:


可以看到,预览窗格中,已经完全是5.0的UI设计风格了。至于为什么是深色的主题,是因为之前在AndroidMenifest.xml中设置了Theme.AppCompat.NoActionBar。

对于ActionBar,我们无需关心在xml布局中的位置,只需要在Java代码中进行设置即可。而对于ToolBar,是要求我们自己写到Layout(布局xml)中的。这也就意味着它可以出现在任意一个我们希望它出现的位置,甚至能够同时存在多个ToolBar,并且互不干扰(参考多个ImageView,或者多个TextView等等)。

我们可以通过创建android.support.v7.widget.Toolbar控件来显示自定义的Toolbar,参考下面的代码:

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     xmlns:app="http://schemas.android.com/apk/res/com.xwh.toolbardemo"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     tools:context="com.xwh.toolbardemo.MainActivity" >  
  7.   
  8.     <android.support.v7.widget.Toolbar  
  9.         android:id="@+id/demo_toolbar"  
  10.         android:layout_width="fill_parent"  
  11.         android:layout_height="wrap_content"  
  12.         android:background="?attr/colorPrimary"  
  13.         android:minHeight="?attr/actionBarSize"  
  14.         app:title="@string/hello_world" />  
  15.   
  16.     <TextView  
  17.         android:layout_width="wrap_content"  
  18.         android:layout_height="wrap_content"  
  19.         android:layout_below="@+id/demo_toolbar"  
  20.         android:text="@string/hello_world" />  
  21.   
  22. </RelativeLayout>  
关于Toolbar的可用属性,这里不多做赘述,大家可以去安卓开发者官网自行搜索API。

到此,这个Toolbar已经可以正常显示了,并且其标题为“Hello World”。而且诸位可以发现,从Toolbar的创建到显示,我们还没有写过一句Java代码。

下面放上运行效果截图:



在下一篇博文中,我们将集中介绍如何使用Toolbar,结合ViewPager,实现类似微信的滑动切换多视图效果。

0 0