我们应该用ToolBarreplaceAction Bar吗?
自从添加到Support v7库以来,我一直在使用ToolBar
。 我想我用得很好。 但有一点我不明白。 为什么Google会创build这样一个小部件? 我的意思是我们可以做任何ToolBar
可以通过使用ActionBar
做。 为什么我们必须使用ToolBar
? 如果有的话, ToolBar
优于ActionBar
? 是否有必要通过ToolBar
replaceActionBar
?
任何提示都表示赞赏。 并提前感谢。
PS:我发现ToolBar
是ViewGroup
一个变种。 那么,我们怎么能像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
指定为Activity
的action bar
。
Toolbar
支持比ActionBar
更集中的function集。 从开始到结束, toolbar
可能包含以下可选元素的组合:
- 导航button 。 这可能是
Up arrow
,导航菜单切换,closures,折叠,完成或应用程序select的其他字形。 应始终使用此button来访问Toolbar
容器内的其他导航目标及其指定内容,否则应保留由Toolbar
表示的当前上下文。 导航button垂直alignment在Toolbar
的最小高度,如果设置。 - 一个品牌标志图像 。 这可能会延伸到酒吧的高度,可以任意宽。
- 标题和副标题 。 标题应该是
Toolbar
在导航层次结构中的当前位置和其中包含的内容的路标。subtitle
(如果存在的话)应指出关于当前内容的任何扩展信息。 如果应用程序使用logo
image
,应该强烈考虑省略title
和subtitle
。 - 一个或多个自定义视图 。 该应用程序可能会将任意的子视图添加到
Toolbar
。 他们会出现在布局的这个位置。 如果一个子视图的Toolbar
。LayoutParams
指示CENTER_HORIZONTAL
的Gravity
值,在所有其他元素被测量之后,视图将试图在Toolbar
剩余的可用空间内居中。 - 一个行动菜单 。 操作
menu
将固定到Toolbar
的末尾,提供一些频繁,重要或典型的操作,以及一个可选的overflow menu
以执行其他操作。Action
button垂直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的图标。 你有更多的控制在你的工具栏,而不是旧的传统的操作栏。
是否有必要通过
ToolBar
replaceActionBar
?
如果您打算在低于2.0的设备上支持操作栏,那么您需要为操作栏提供后端端口兼容性。
- 您可以轻松自定义工具栏。
- 您可以在工具栏中添加许多小部件。
- 您可以在视图中添加许多工具栏。
- 你可以自由地把它放在父布局的任何地方。
- 他们有自己的处理/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版本,或者当我们扩展某些类(使其透明或显示一个图标,而不是应用程序名称)。 工具栏允许我们使用我们想要的定制选项。