我们应该用ToolBarreplaceAction Bar吗?

自从添加到Support v7库以来,我一直在使用ToolBar 。 我想我用得很好。 但有一点我不明白。 为什么Google会创build这样一个小部件? 我的意思是我们可以做任何ToolBar可以通过使用ActionBar做。 为什么我们必须使用ToolBar ? 如果有的话, ToolBar优于ActionBar ? 是否有必要通过ToolBarreplaceActionBar

任何提示都表示赞赏。 并提前感谢。

PS:我发现ToolBarViewGroup一个变种。 那么,我们怎么能像Layout一样使用ToolBar呢? 有人可以发布一些代码吗?

是的,你应该用新的工具栏replaceActionBar

原因

1)它看起来很现代,它遵循新的材料devise

2)与操作栏不同,工具栏不是窗口装饰的一部分。您定义它并将其放置为像其他任何小部件一样…因此,您可以自由将其放置在父级布局的任何位置。

3)你可以自由地把任何部件放在工具栏中。

4)您可以定义多个工具栏。

编辑

我的意思是你可以在工具栏中放置其他小工具(视图)。

为工具栏创build一个单独的布局文件(有利于重用)。在我的情况下,文件名是main_toolbar

  <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:App="http://schemas.android.com/apk/res-auto" xmlns:segmentedgroup="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_width="match_parent" App:theme="@style/ToolbarColoredBackArrow" android:layout_height="56dp" android:background="@color/primary_color" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="@dimen/drawer_fntsize" android:text="Title" android:id="@+id/lbl_title" android:textColor="@color/title_text_color" android:layout_gravity="center" /> </android.support.v7.widget.Toolbar> 

然后像这样在主布局中包含这个工具栏

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <include android:id="@+id/toolbar" layout="@layout/main_toolbar"/> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/toolbar" /> 

正如你可以在这个例子中看到的,我把TextView放在工具栏中

为什么Android会创build这样一个小部件?

想象一下,如果你愿意,Android平板电脑。

这款平板电脑正在运行应用 该应用程序在屏幕的右下angular有一个富文本编辑器,可以在其中input一些注释并用粗体斜体等格式化它们。

在桌面或Web应用程序中,除键盘快捷方式之外,这些格式化选项的典型方法将是一个工具栏,就像您在Stack Overflow的答案文本区域上方看到的那样。

Toolbar之前,Android开发者不得不推出自己的工具栏,或者将格式化操作放在操作栏中。 虽然后一种方法很容易,但是由于用户必须不断地将其视觉焦点从编辑器(屏幕的底部)切换到操作栏(屏幕的顶部),所以对上述虚构应用程序的用户造成了压力。

为什么我们要使用ToolBar?

您不必使用Toolbar 。 作为我的书的一部分, 我有大约300个示例应用程序 ,而目前正好有零个应用程序使用Toolbar 。 因为我还没有在Toolbar上写过一章,所以我必须在某个时候纠正这个问题。

是否有必要通过ToolBarreplaceActionBar?

没有。有办法做到这一点,但没有必要。

工具栏比标准的ActionBar更加灵活,你可以在工具栏中添加更多的工具(因为它扩展了ViewGroup),并遵循Material Design Guidelines。

例如,使用工具栏,您可以执行以下操作:

我的文件与大工具栏

常规的ActionBar不打算这样扩展。

另外,您可以更好地操作工具栏内容,因为您可以将其包含在“活动”布局xml文件中。 就个人而言,我使用一个LinearLayout或一个RelativeLayout在顶部,工具栏和下面,填充剩余空间,一个FrameLayout我的片段将被添加。

最后,您可以将您的工具栏放置在您想要的任何位置,就像在布局文件中设置它一样。

更新:

Google发布了Androiddevise支持库 。 推荐使用扩展Appbar的方法是将Toolbar AppBarLayout ,然后添加额外的视图,例如TabLayout 。要在此工具栏上获得FAB,请使用CoordinatorLayout来封装布局内容,然后使用锚点FAB上的属性。

一个标准的toolbar用于应用程序内容。

Toolbar是应用程序布局中使用的action bar的概括。 虽然action bar传统上是由framework控制的Activity的不透明window decor一部分,但Toolbar可以放置在视图层次结构中的任意任意级别的嵌套上。 应用程序可以select使用setActionBar()方法将Toolbar指定为Activityaction bar

Toolbar支持比ActionBar更集中的function集。 从开始到结束, toolbar可能包含以下可选元素的组合:

  • 导航button 。 这可能是Up arrow ,导航菜单切换,closures,折叠,完成或应用程序select的其他字形。 应始终使用此button来访问Toolbar容器内的其他导航目标及其指定内容,否则应保留由Toolbar表示的当前上下文。 导航button垂直alignment在Toolbar的最小高度,如果设置。
  • 一个品牌标志图像 。 这可能会延伸到酒吧的高度,可以任意宽。
  • 标题和副标题 。 标题应该是Toolbar在导航层次结构中的当前位置和其中包含的内容的路标。 subtitle (如果存在的话)应指出关于当前内容的任何扩展信息。 如果应用程序使用logo image ,应该强烈考虑省略titlesubtitle
  • 一个或多个自定义视图 。 该应用程序可能会将任意的子视图添加到Toolbar 。 他们会出现在布局的这个位置。 如果一个子视图的ToolbarLayoutParams指示CENTER_HORIZONTALGravity值,在所有其他元素被测量之后,视图将试图在Toolbar剩余的可用空间内居中。
  • 一个行动菜单 。 操作menu将固定到Toolbar的末尾,提供一些频繁,重要或典型的操作,以及一个可选的overflow menu以执行其他操作。 Actionbutton垂直alignment在Toolbar的最小高度,如果设置。

在现代的Android用户界面中,开发人员应该更多地依赖工具栏视觉上不同的颜色scheme,而不是应用程序图标。 应用程序图标加标题作为标准布局的使用在API 21设备和更新版本上是不鼓励的。

工具栏是在应用程序布局中使用的动作条的泛化。 虽然操作栏传统上是由框架控制的Activity的不透明窗口装饰的一部分, 但工具栏可以放置在视图层次结构中的任意任意级别的嵌套上 。 应用程序可以select使用setActionBar()方法将工具栏指定为Activity的操作栏。 你可以在这里find更多的信息。 我们replace了我们的操作栏,因为更容易为材料devise自定义工具栏。 例如,调色板和消失的animation行为。 就个人而言,我不明白为什么android会抛弃旧的控件并创build新的控件。 另一个例子是RecyclerView。 不明白为什么他们只是没有改善旧的API。

为什么我们要使用ToolBar

工具栏用于旧的支持库不提供的预设备和回溯兼容性。 记住ActionbarSherlock ,android自己在低级API设备上支持actionbar。

如果有的话, ToolBar优于ActionBar

您可以轻松地添加自定义视图,如相对布局视图,特别是自定义标题和带有animation的图标。 你有更多的控制在你的工具栏,而不是旧的传统的操作栏。

是否有必要通过ToolBarreplaceActionBar

如果您打算在低于2.0的设备上支持操作栏,那么您需要为操作栏提供后端端口兼容性。

  1. 您可以轻松自定义工具栏。
  2. 您可以在工具栏中添加许多小部件。
  3. 您可以在视图中添加许多工具栏。
  4. 你可以自由地把它放在父布局的任何地方。
  5. 他们有自己的处理/pipe理它的子视图。

:两者都将支持一般的应用程序导航,图标和后向支持。

答案取决于你的devise所要求的用户交互(animation工具栏)。 这就是说你应该在工具栏上实现animation,使其成为材质。


动作条:

如果你只是想要一个可以托pipe图标的顶部静态栏,返回button,你可以主题。

工具栏:

如果你想做任何事情,超越静态栏,如animation。

Googledevise推荐的一个常见实现是在滚动时隐藏工具栏。 材料devise清单:滚动时隐藏应用栏?

支持Toolbar为您提供了更多的灵活性和自由度,几乎没有任何额外的成本,我没有理由不考虑过渡。 由于任务的简单性以及对应用程序整体外观的直接影响,转换到新Toolbar实际上是将现有应用程序移植到更多“材质”devise的第一步。

这里是文档链接 – http://developer.android.com/training/appbar/setting-up.html

请注意,它不包含将其包含在其他布局文件中的代码:

 <include android:id="@+id/toolbar" layout="@layout/tool_bar"/> 

为什么我更改为工具栏 – 我将最近的应用程序更改为工具栏的原因之一是,当我们想要自定义操作栏时,它不适用于不同的Android版本,或者当我们扩展某些类(使其透明或显示一个图标,而不是应用程序名称)。 工具栏允许我们使用我们想要的定制选项。