关于android:我们应该用工具栏替换操作栏吗?

Should we replace Action Bar by ToolBar?

自从ToolBar被添加到Support v7库以来,我一直在使用它。 而且我认为我很好用。 但是有一点我不明白。 Google为什么要创建这样的小部件? 我的意思是我们可以使用ActionBarToolBar可以做的任何事情。 为什么我们必须使用ToolBarToolBarActionBar相比有什么优势? 是否有必要将ActionBar替换为ToolBar

任何提示表示赞赏。 并预先感谢。

PS:我发现ToolBarViewGroup的倒数。 那么,如何像Layout一样使用ToolBar? 有人可以发布一些代码吗?


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

原因

  • 它看起来很现代,并采用了新的材料设计。

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

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

  • 您可以定义多个工具栏。

  • 编辑

    我的意思是,您可以将其他小部件(视图)放在工具栏内。

    为工具栏创建一个单独的布局文件(可重复使用)。在我的情况下,文件名为main_toolbar.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?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>

    然后像这样在您的主布局中包含此工具栏

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?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>

    如本例所示,我将TextView放置在工具栏内


    why Android would create such a widget?

    想象一下,如果有的话,一个Android平板电脑。

    该平板电脑正在运行一个应用程序。该应用程序在屏幕的右下角具有一个富文本编辑器,您可以在其中输入一些注释并用粗体,斜体等格式设置注释。

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

    Toolbar之前,Android开发人员必须滚动自己的工具栏,或将格式设置操作放入操作栏中。尽管后一种方法很容易,但是它给上述虚构应用的用户带来了压力,因为用户必须不断将其视觉焦点从编辑器(屏幕底部)切换到动作栏(屏幕顶部)。

    Why have we to use ToolBar?

    您不必使用Toolbar。我的书中有约300个示例应用程序,目前,正好有零个使用Toolbar。由于还没有写关于Toolbar的章节,因此我必须在某个时候纠正它。

    Is it necessary to replace ActionBar by ToolBar?

    否。有一种方法可以执行此操作,但这不是必需的。


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

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

    My Files with big toolbar

    常规的ActionBar并不打算以这种方式扩展。

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

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

    更新:

    Google发布了Android设计支持库。推荐使用扩展的Appbar的方法是用AppBarLayout包装Toolbar,并添加诸如TabLayout的其他视图。如本屏幕截图所示,要通过工具栏获取FAB,可以使用CoordinatorLayout包装您的布局内容,然后在FAB上使用锚点属性。


    标准toolbar用于应用程序内容中。

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

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

    • 导航按钮。这可能是Up arrow,导航菜单切换,
      关闭,折叠,完成或应用选择的其他图示符号。这个
      按钮应始终用于访问其他导航
      toolbar容器内的目的地及其表示
      内容或以其他方式保留当前上下文(由
      toolbar。导航按钮在
      toolbar的最小高度(如果已设置)。
    • 品牌徽标图像。这可能会延伸到钢筋的高度,并且
      可以任意宽。
    • 标题和副标题。标题应该是
      toolbar在导航层次结构中的当前位置以及
      那里包含的内容。 subtitle(如果存在)应指示任何
      有关当前内容的扩展信息。如果应用使用logo
      image,应该强烈考虑省略titlesubtitle
    • 一个或多个自定义视图。应用程序可以添加任意子项
      toolbar的视图。它们将出现在
      布局。如果子视图的toolbarLayoutParams表示Gravity
      CENTER_HORIZONTAL,视图将尝试在
      所有其他元素之后toolbar中剩余的可用空间
      已被测量。
    • 一个动作菜单。 menu动作将固定在
      toolbar提供一些频繁,重要或典型的动作
      带有可选的overflow menu来执行其他操作。 Action按钮
      如果已设置,则在toolbar的最小高度内垂直对齐。

    在现代Android UI中,开发人员应该更多地依靠工具栏的视觉上不同的配色方案,而不是依靠应用程序图标。不建议在API 21及更高版本的设备上使用应用程序图标加标题作为标准布局。


  • 您可以轻松自定义工具栏。
  • 您可以在工具栏内添加许多小部件。
  • 您可以在视图中添加许多工具栏。
  • 您可以将其放置在父布局中的任何位置。
  • 他们对子视图有自己的处理/管理。

  • Why have we to use ToolBar?

    工具栏用于实现旧支持库未提供的前置设备和反向端口兼容性。记住ActionbarSherlock,Android本身就支持低级API设备上的操作栏。

    What are advantages of ToolBar over ActionBar if any?

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

    Is it necessary to replace ActionBar by ToolBar?

    如果要在低于2.0的设备上支持操作栏,则可以,您需要操作栏的后端口兼容性。


    注意:两者都将支持常规应用程序导航,图标并具有向后支持。

    答案取决于您的设计需要什么样的用户交互(动画工具栏)。话虽如此,您应该在工具栏上实现动画以使其具有"材质"。


    动作栏:

    如果您只想在顶部放置一个静态栏,可以承载图标,后退按钮和主题。

    工具列:

    如果要执行除静态条之外的任何操作,例如动画。

    常见的实现和Google设计建议是在滚动时隐藏工具栏。
    材料设计清单:在滚动条上隐藏应用栏?


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


    支持Toolbar为您提供了更多的灵活性和自由性,几乎没有增加任何额外的费用,因此我没有理由不进行过渡。由于任务的简单性及其对应用程序整体外观的直接影响,因此过渡到新的Toolbar实际上是将现有应用程序移植到更多Material设计的第一步。


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

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

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

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