我们应该用ToolBar替换Action Bar吗?

Sil*_*ght 56 android android-actionbar android-toolbar

我一直在使用ToolBar它,因为它被添加到Support v7库中.我觉得我用得很好.但有一点我无法理解.为什么Google会创建这样的小部件?我的意思是我们可以ToolBar通过使用做任何事情ActionBar.我们为什么要使用ToolBar?有什么优势ToolBarActionBar如果有的话?是否有必要更换ActionBarToolBar

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

PS:我发现ToolBar是一个蜕变ViewGroup.那么,我们怎么能ToolBarLayout?有人可以发布一些代码吗?

Sha*_*ake 33

是的,您应该用新工具栏替换ActionBar.

原因

  1. 它看起来很现代,并且遵循新的材料设计.

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

  3. 您可以自由地将任何小部件放在工具栏中.

  4. 您可以定义多个工具栏.

编辑

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

为工具栏创建单独的布局文件(适用于可重用性).在我的情况下,文件名是main_toolbar.xml

<?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>
Run Code Online (Sandbox Code Playgroud)

然后在此主布局中包含此工具栏

<?xml version="1.0" encoding="utf-8"?>
<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" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

正如您在此示例中所看到的,我将TextView放在工具栏中

  • 你说我们可以像其他人一样使用`ToolBar`作为小部件.在阅读了doc之后,我发现`ToolBar`继承自`ViewGroup`,所以,你有没有成功使用`ToolBar`作为`Layout`就像`LinearLayout`,`FrameLayout`? (2认同)

Com*_*are 22

为什么Android会创建这样的小部件?

想象一下,如果你愿意的话,Android平板电脑.

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

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

在此之前Toolbar,Android开发人员必须滚动自己的工具栏,或将格式化操作放在操作栏中.虽然后一种方法很容易,但它会给上述虚构应用程序的用户带来压力,因为用户必须将她的视觉焦点从编辑器(屏幕底部)切换到动作栏(屏幕顶部).

我们为什么要使用ToolBar?

你不必使用Toolbar.作为我的书的一部分,大约300个样本应用程序,目前,它们正好使用了零.我必须在某些时候纠正这个问题,因为我还没有写过章节.ToolbarToolbar

是否有必要用ToolBar替换ActionBar?

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

  • "CommonsWare"是个人还是组织?我读过你的一些代码. (10认同)
  • @SilentKnight:"CommonsWare是个人还是组织?" - 是的 :-) (9认同)
  • 我认为@SilentKnight继续存在同样的疑问,您可以同时成为一个人,一个组织或两者,因为当运营商是OR时,它们是3个可能的正面答案 (4认同)

Lou*_*CAD 17

工具栏比标准ActionBar更灵活,您可以在工具栏中添加更多工具(因为它扩展了ViewGroup),并遵循材料设计指南.

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

我的文件有大工具栏

常规ActionBar不打算以这种方式扩展.

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

最后,您可以将工具栏放在布局文件中的任何位置.

更新:

谷歌发布了Android设计支持库.推荐的方式得到扩展Appbar是包装ToolbarAppBarLayout,并添加额外的观点如TabLayout.要获得FAB在工具栏就像这个截图,你可以使用CoordinatorLayout包布局的内容,然后用在FAB锚属性.


Sil*_*ght 8

标准toolbar用于应用程序内容.

A Toolbaraction bar在应用程序布局中使用的s 的概括.虽然action bar传统上是由不受控制Activity的不透明的一部分,但是可以将a放置在视图层次结构中的任意嵌套级别.一个应用程序可以选择指定一个作为用于使用该方法.window decorframeworkToolbarToolbaraction barActivitysetActionBar()

Toolbar支持更集中的功能集ActionBar.从头到尾,a toolbar可能包含以下可选元素的组合:

  • 导航按钮.这可能是Up arrow导航菜单切换,关闭,折叠,完成或应用程序选择的其他字形.此按钮应始终用于访问Toolbar其所指示内容的容器内的其他导航目标,或以其他方式保留当前上下文所表示的 Toolbar.Toolbar如果设置,导航按钮在最小高度内垂直对齐 .
  • 品牌徽标图像.这可以延伸到杆的高度并且可以任意宽.
  • 标题和副标题.标题应该是Toolbar导航层次结构中当前位置及其中包含的内容的路标 .的subtitle,如果存在应注明有关当前内容的任何扩展信息.如果应用程序使用logo image它,则应强烈考虑省略a titlesubtitle.
  • 一个或多个自定义视图.应用程序可能会添加任意子视图Toolbar.它们将出现在布局中的这个位置.如果孩子观看了Toolbar.LayoutParams表示视图的GravityCENTER_HORIZONTAL将尝试Toolbar在测量所有其他元素之后剩余的可用空间内居中.
  • 动作菜单.这些menu操作将针对产品的结尾 Toolbar提供一些频繁,重要或典型的操作以及可选overflow menu的其他操作.如果设置,Action按钮在Toolbar最小高度内垂直对齐.

在现代AndroidUI中,开发人员应该更多地依赖于工具栏的视觉上不同的颜色方案而不是应用程序图标.API 21设备和更新设备不鼓励使用应用程序图标和标题作为标准布局.


Acc*_*ied 5

工具栏是在应用程序布局中使用的操作栏的概括。虽然操作栏传统上是由框架控制的活动不透明窗口装饰的一部分,但工具栏可以放置在视图层次结构中的任意嵌套级别。应用程序可以选择使用 setActionBar() 方法将工具栏指定为活动的操作栏。您可以在此处找到更多信息。我们替换了我们的操作栏,因为它更容易为材料设计自定义工具栏。例如,调色板和消失的动画行为。就我个人而言,我不明白为什么 android 会扔掉旧控件并创建新控件。另一个例子是 RecyclerView。不明白他们为什么不改进旧的 API。


Rod*_*uin 5

我们为什么要使用ToolBar

工具栏用于旧支持库不提供的预设备和后端兼容性.请记住ActionbarSherlock,android自己在那里支持低级API设备上的actionbar.

有什么优势ToolBarActionBar如果有的话?

您可以在工具栏的XML中轻松添加自定义视图,例如相对布局视图,特别是自定义标题和带动画的图标.您可以在工具栏上进行更多控制,而不是旧的传统操作栏.

是否有必要更换ActionBarToolBar

如果您要在低于2.0的设备上支持操作栏,那么是,您需要操作栏的后端口兼容性.


Har*_*shi 5

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