Android中Toolbar (1)

  • 今天来说说Android Material Design系列之Toolbar,Toolbar是Android5.0新增的一个控件,在开发中为了兼容低版本一般使用support v7中的Toolbar。Toolbar可以理解为就是一个工具栏,在Android5.0以前的版本中都是由ActionBar来实现的工具栏。Toolbar本身是一个 ViewGroup(而Actionbar直接继承自object)相比Actionbar可以更加灵活的配置使用。

  • 从 Android 3.0(API 级别 11)开始,所有使用默认主题的 Activity 均使用 ActionBar 作为应用栏。不过,经过不同 Android 版本的演化,应用栏功能已逐渐添加到原生 ActionBar 中。因此,原生 ActionBar 的行为会随设备使用的 Android 系统的版本而发生变化。相比之下,最新功能已添加到支持库版本的 Toolbar 中,并且这些功能可以在任何能够使用该支持库的设备上使用。因此,您应使用支持库的 Toolbar 类来实现 Activity 的应用栏。使用支持库的工具栏有助于确保您的应用在最大范围的设备上保持一致的行为。例如,Toolbar 小部件能够在运行 Android 2.1(API 级别 7)或更高版本的设备上提供 Material Design 体验,但除非设备运行的是 Android 5.0(API 级别 21)或更高版本,否则原生操作栏不会支持 Material Design。

开始讲讲toolbar的使用:
官方步骤说明:

1.按照支持库设置中所述向您的项目添加 v7 appcompat 支持库。

2.确保 Activity 可以扩展 AppCompatActivity:
 public class MainActivity extends  AppcompatActivity{//... }
    注:请为您应用中每一个使用Toolbar作为应用栏的Activity  进行此修改。

3.在应用清单中,将 <application> 元素设置为使用 appcompat 的其中一个 NoActionBar主题。
 使用这些主题中的一个可以防止应用使用原生 ActionBar 类提供应用栏。
 例如:<application android : theme = "@style/Theme.AppCompat.Light.NoActionBar"/> 

4.向 Activity 的布局添加一个 Toolbar。例如,以下布局代码可以添加一个 Toolbar 并赋予其浮动在 Activity 之上的外观: 

        <android.support.v7.widget.Toolbar

            android:id="@+id/my_toolbar"

            android:layout_width="match_parent"

            android:layout_height="?attr/actionBarSize"

            android:background="?attr/colorPrimary"

            android:elevation="4dp"

            android:theme="@style/ThemeOverlay.AppCompat.ActionBar"

            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

    MaterialDesign 规范建议应用栏具有 4 dp 的仰角。

    将工具栏定位在 Activity 布局的顶部,因为您要使用它作为应用栏。

5.在 Activity 的 onCreate() 方法中,调用 Activity 的 setSupportActionBar() 方法,然后传递 Activity 的工具栏。 
该方法会将工具栏设置为 Activity 的应用栏。例如:

        @Override

        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_my);

            Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);

            setSupportActionBar(myToolbar);

        } 

 您的应用现在具有一个基本操作栏。默认情况下,操作栏只包含应用的名称和一个溢出菜单。选项菜单最初 只包含 Settings 菜单项。
 您可以按照添加和处理操作中所述向操作栏和溢出菜单添加更多操作。

使用应用栏实用方法

将工具栏设置为 Activity 的应用栏后,您就可以访问 v7 appcompat 支持库的 ActionBar 类提供的各种实用方法。您可以通过此方法执行许多有用的操作,例如隐藏和显示应用栏。

要使用 ActionBar 实用方法,请调用 Activity 的 getSupportActionBar() 方法。此方法将返回对 appcompat ActionBar 对象的引用。获得该引用后,您就可以调用任何一个 ActionBar 方法来调整应用栏。例如,要隐藏应用栏,请调用 ActionBar.hide()。

添加和处理操作

应用栏,您可以添加按钮,以便用户操作。此功能可以让你把最重要的行动,针对当前的上下文就在应用程序的顶部。例如,照片浏览应用程序可能会显示共享 和创建相册顶部的按钮,当用户在看他们的照片卷; 当用户看个人照片,应用程序可能显示作物和过滤器的按钮。
空间应用栏是有限的。如果应用程序声明多个动作而不适合应用栏,应用栏发送多余动作的 溢出菜单。该应用程序还可以指定一个动作应该总是在溢出菜单显示,而不是显示在应用栏上。

添加动作按钮

在动作溢出提供的所有操作按钮和其他物品在XML定义的菜单资源。要添加动作动作栏,创建项目中的一个新的XML文件 res/menu/的目录。
添加 元素要在操作栏包括,如图菜单XML文件的该代码示例中的每个项目:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- "Mark Favorite", should appear as action button if possible -->
    <item
        android:id="@+id/action_favorite"
        android:icon="@drawable/ic_favorite_black_48dp"
        android:title="@string/action_favorite"
        app:showAsAction="ifRoom"/>

    <!-- Settings, should always be in the overflow -->
    <item android:id="@+id/action_settings"
        android:title="@string/action_settings"
        app:showAsAction="never"/>

</menu>

该app:showAsAction属性指定动作是否应显示为应用栏上的按钮。如果设置 app:showAsAction=”ifRoom”(如示例代码中的最喜欢的动作),动作显示,如果有空间为它的应用栏按钮; 如果没有足够的空间,过量的动作被发送到溢出菜单。如果设置 app:showAsAction=”never”(如示例代码的设置动作),动作总是在溢出菜单,不显示在应用程序栏中列出。
该系统使用动作的图标,操作按钮是否显示在应用栏的动作。你可以找到很多有用的图标材料图标的页面。

应对措施

当用户选择应用栏项目之一,系统调用您的活动的onOptionsItemSelected()回调方法,并传递一个MenuItem对象来表示单击了哪个项目。在你的实现onOptionsItemSelected(),调用MenuItem.getItemId()方法来确定按下了哪个项目。返回的ID,你在相应的声明的值相匹配 元素的android:id属性。

例如,下面的代码检查以查看用户选择哪个动作。如果该方法不能识别用户的动作时,它调用超类方法:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_settings:
            // User chose the "Settings" item, show the app settings UI...
            return true;

        case R.id.action_favorite:
            // User chose the "Favorite" action, mark the current item
            // as a favorite...
            return true;

        default:
            // If we got here, the user's action was not recognized.
            // Invoke the superclass to handle it.
            return super.onOptionsItemSelected(item);

    }
}

行动的意见和行动提供商

在V7应用程序兼容性支持库Toolbar为用户提供与应用互动几种不同的方式。前面的课程描述了如何定义一个动作,它可以是一个按钮或菜单项。本课介绍如何添加两个通用的组件:

一个动作观点是提供应用栏内丰富的功能操作。例如,搜索动作视图允许用户键入应用栏的搜索文本,无需更改活动或片段。
一个动作提供商是有自己的定制布局的操作。动作最初显示为一个按钮或菜单项,但是当用户点击动作时,动作提供商控制中要定义的任何方式操作的行为。例如,该操作提供者可能通过显示菜单来点击响应。
Android的支持库提供一些专门的行动看法和行动提供部件。例如,SearchView小部件实现了用于输入搜索查询的动作视图和ShareActionProvider小部件实现了与其他应用程序共享信息的行为提供商。您也可以定义自己的行动的看法和行动提供商。

添加一个行动查看

要添加一个动作视图,创建 工具栏的菜单资源元素,如添加动作按钮描述。添加以下两个属性的一个

item元素:

actionViewClass:类实现操作的窗口小部件。
actionLayout:描述该操作的组件布局资源。

设置showAsAction属性要么 “ifRoom|collapseActionView”或 “never|collapseActionView”。该collapseActionView 标志指示如何显示控件,当用户不与它交互:如果小部件是应用栏上,应用程序应该显示小部件的图标。如果小部件是在溢出菜单,应用程序应该显示的部件作为菜单项。当用户使用动作视图交互时,它扩展以填充应用栏。

例如,下面的代码添加了一个SearchView小部件应用栏:

    <item android:id="@+id/action_search"
        android:title="@string/action_search"
        android:icon="@drawable/ic_search"
        app:showAsAction="ifRoom|collapseActionView"
        app:actionViewClass="android.support.v7.widget.SearchView" />

如果用户没有与小部件交互,该应用显示插件通过指定的图标android:icon。(如果没有足够的空间应用栏,应用程序添加动作到溢出菜单)。当用户点击该图标或菜单项,窗口小部件展开以填充工具栏,允许用户与它进行交互

如果您需要配置的动作,在你活动的这样做onCreateOptionsMenu()回调。您可以通过调用静态拿到动作视图的对象引用getActionView()的方法。例如,下面的代码将获取对象的引用SearchView在上面的代码示例定义窗口小部件:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_activity_actions, menu);
    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchView searchView =
        (SearchView) MenuItemCompat.getActionView(searchItem);
    // Configure the search info and add any event listeners...
    return super.onCreateOptionsMenu(menu);
}

官方使用步骤介绍到此,翻译的过于生硬了,见谅。。。

Android中的Toolbar (2)http://blog.csdn.net/hj2drf/article/details/62226758

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值