我一直在使用ToolBar
,因为它已添加到支持v7库中。我觉得我用得很好。但有一点我无法理解。为什么Google会创建这样的小部件?我的意思是我们可以使用ToolBar
执行ActionBar
可以执行的任何操作。为什么我们必须使用ToolBar
? ToolBar
优于ActionBar
的优势是什么?是否有必要将ActionBar
替换为ToolBar
?
任何提示都表示赞赏。并提前感谢。
PS:我发现ToolBar
是ViewGroup
的一个重要部分。那么,我们怎样才能像ToolBar
一样使用Layout
?有人可以发布一些代码吗?
答案 0 :(得分:33)
是的,您应该用新工具栏替换ActionBar。
原因
它看起来很现代,并且遵循新的材料设计。
与操作栏不同,工具栏不是窗口装饰的一部分。您可以像定义任何其他窗口小部件一样定义它并放置它...因此,您可以自由地将它放置在父布局中的任何位置。
您可以自由地将任何小部件放在工具栏中。
您可以定义多个工具栏。
修改
我的意思是你可以在工具栏中放置其他小部件(视图)。
为工具栏创建单独的布局文件(适用于可重用性)。在我的情况下,文件名是 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>
然后在您的主要布局中包含此工具栏,如下所示
<?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放在工具栏中
答案 1 :(得分:22)
为什么Android会创建这样的小部件?
想象一下,如果你愿意的话,Android平板电脑。
此平板电脑正在运行应用。该应用在屏幕的右下角有一个富文本编辑器,可以在其中输入一些注释,并使用粗体,斜体等格式化它们。
在桌面或Web应用程序中,除了键盘快捷键之外,这些格式化选项的典型方法是工具栏,就像您在Stack Overflow上的答案文本区域上方看到的那样。
在int sum = fib1 + fib2;
fib1 = fib2;
fib2 = sum;
之前,Android开发人员必须滚动自己的工具栏,或将格式化操作放在操作栏中。虽然后一种方法很容易,但它会给上述虚构应用程序的用户带来压力,因为用户必须将她的视觉焦点从编辑器(屏幕底部)切换到操作栏(屏幕顶部)。
为什么我们要使用ToolBar?
您不必使用Toolbar
。我~300 sample apps作为my book的一部分,目前,其中只有零个使用Toolbar
。我必须在某些时候纠正这个问题,因为我还没有写过关于Toolbar
的章节。
是否有必要用ToolBar替换ActionBar?
没有。有一种方法可以做到这一点,但没有必要。
答案 2 :(得分:17)
工具栏比标准ActionBar更灵活,您可以在工具栏中添加更多工具(因为它扩展了ViewGroup),并遵循材料设计指南。
例如,使用工具栏,您可以执行以下操作:
常规ActionBar不打算以这种方式扩展。
此外,您可以更好地操作工具栏内容,因为您可以将其包含在Activity布局xml文件中。就个人而言,我在顶部,工具栏和下方使用LinearLayout或RelativeLayout,填充剩余空间,一个FrameLayout,我的片段将被添加到其中。
最后,您可以将工具栏放置在布局文件中的任何位置。
<强>更新强>
Google发布了Android Design Support Library。获取扩展Appbar的推荐方法是使用Toolbar
打包AppBarLayout
,然后添加其他视图,例如TabLayout
。要在此屏幕截图中获取工具栏上的FAB,您可以使用CoordinatorLayout
包装您的布局内容,然后在FAB上使用锚属性。
答案 3 :(得分:8)
标准toolbar
适用于应用程序内容。
Toolbar
是action bar
的一般化,可在应用程序布局中使用。虽然action bar
传统上是由Activity
控制的window decor
不透明framework
的一部分,但Toolbar
可以放置在任意任意级别的嵌套中视图层次结构。应用可以选择使用Toolbar
方法为action bar
指定Activity
作为setActionBar()
。
Toolbar
支持比ActionBar
更具针对性的功能集。从开始到结束,toolbar
可能包含以下可选元素的组合:
Up arrow
导航菜单切换,
关闭,折叠,完成或应用程序选择的另一个字形。这个
按钮应始终用于访问其他导航
Toolbar
容器内的目的地及其标志
内容或以其他方式留下由...表示的当前上下文
Toolbar
。导航按钮在内部垂直对齐
Toolbar
的最小身高(如果设置)。Toolbar
在导航层次结构中的当前位置和
那里的内容。如果存在subtitle
,则应指明任何内容
有关当前内容的扩展信息。如果应用使用logo
image
它应该强烈考虑省略title
和subtitle
。Toolbar
。他们将出现在这个位置
布局。如果子视图的Toolbar
。LayoutParams
表示Gravity
CENTER_HORIZONTAL
视图的值将尝试居中
所有其他元素之后Toolbar
中剩余的可用空间
已被测量过。menu
将固定到最后
Toolbar
提供一些频繁,重要或典型的行动
使用可选的overflow menu
进行其他操作。 Action
个按钮
如果设置,则在Toolbar
的最小高度内垂直对齐。在现代Android
用户界面中,开发人员应该更多地依赖于工具栏的视觉上不同的颜色方案而不是应用程序图标。不鼓励在API 21设备和更新版本上使用应用程序图标和标题作为标准布局。
答案 4 :(得分:5)
为什么我们要使用
ToolBar
?
工具栏用于旧支持库不提供的预设备和后端兼容性。请记住ActionbarSherlock
,android自己在那里支持低级API设备上的操作栏。
ToolBar
优于ActionBar
有什么好处?
您可以在工具栏的XML中轻松添加自定义视图,例如相对布局视图,特别是自定义标题和带动画的图标。您可以在工具栏上拥有更多控制权,而不是旧的传统操作栏。
是否有必要将
ActionBar
替换为ToolBar
?
如果您要在低于2.0的设备上支持操作栏,那么是的,您需要操作栏的后端口兼容性。
答案 5 :(得分:5)
答案 6 :(得分:4)
工具栏是在应用程序布局中使用的操作栏的概括。虽然操作栏传统上是由框架控制的Activity的不透明窗口装饰的一部分,但工具栏可以放置在视图层次结构中的任意嵌套级别。应用程序可以选择使用setActionBar()方法将工具栏指定为Activity的操作栏。您可以找到更多信息here。我们更换了操作栏,因为更容易为材料设计自定义工具栏。例如,调色板和消失的动画行为。 就个人而言,我不明白为什么android抛弃旧控件并创建新控件。另一个例子是RecyclerView。不明白为什么他们只是没有改进旧的API。
答案 7 :(得分:1)
是强>
支持import re
def zerowidthsplit(pattern, string):
splits = list(m.start() for m in re.finditer(pattern, string))
starts = [0] + splits
ends = splits + [ len(string) ]
return [string[start:end] for start, end in zip(starts, ends)]
print(zerowidthsplit(r'(?<!foo)(?=bar)', 'foobarbarbazbar'))
为您提供了更大的灵活性和自由度,几乎没有额外的额外成本,我没有理由不考虑不进行转换。转换到新的Toolbar
实际上是将现有应用程序移植到更多Material设计的第一步,因为任务的简单性以及它对应用程序整体外观的直接影响。
答案 8 :(得分:0)
以下是文档链接 - http://developer.android.com/training/appbar/setting-up.html
请注意,它不包含您将其包含在其他布局文件中的代码:
<include
android:id="@+id/toolbar"
layout="@layout/tool_bar"/>
为什么我更改为工具栏 - 我将最近的应用更改为工具栏的原因之一是,当我们想要自定义操作栏时,它不适用于不同的Android版本或者我们扩展某些类(制作它)透明或显示图标而不是应用程序名称)。工具栏为我们提供了我们想要的自定义选项。