我在Google Design App Bar指南中看到了扩展高度的应用程序栏。如何在Android Lollipop中实现这些功能?
Answers:
您需要使用新的工具栏小部件来实现此目的。工具栏具有特殊的处理方式,因为它声明了用于按钮(和操作)的空间的最小高度。
在下面的示例中,我们将高度设置为128dp(规范中定义为56dp + 72dp),但将其保留android:minHeight
为标准值actionBarSize
(通常为56dp)。这意味着按钮和动作被限制为垂直位于顶部56dp中。然后,我们可以使用android:gravity
将标题放置在底部。
<Toolbar
android:id="@+id/toolbar"
android:layout_height="128dp"
android:layout_width="match_parent"
android:minHeight="?android:attr/actionBarSize"
android:background="?android:attr/colorPrimary"
android:gravity="bottom" />
如果您使用的是AppCompat,则更改声明以改为使用android.support.v7.widget.Toolbar
并使用其属性。
@dimen/action_bar_size_x2
,并在手机上使用112dp,在平板电脑上使用128dp
android:paddingBottom
buttonGravity
设置为时会引入奇怪的间距bottom
。该titleMarginBottom
属性似乎是更好的选择,不是吗?
感谢您的问题,答案以及本机和支持库中工具栏的实现:)
而且我们可以玩更多。我们可以在运行时使用Height和MinimalHeight。
高度是ToolBar的高度,很简单,每个人都可以理解,并且重力根据该高度起作用。
minimumHeight比较棘手,不应至少为56dp。此minHeight用于放置menuItem的行。这条线在你的minHeight的中间。
因此,您可以将此代码添加到您的活动中,以自己查看区别。:)
Runnable toolBarAnimator=new Runnable() {
@Override
public void run() {
if(postICS){
// toolbar.setTranslationX(iteration);
// toolbar.setElevation(iteration);
toolbar.setMinimumHeight(iteration * 5);
toolbar.getLayoutParams().height++;
}
uiThreadHanlder.postDelayed(this,16);
iteration++;
if(iteration>150)iteration=0;
}
};
Handler uiThreadHanlder=new Handler();
int iteration=0;
@Override
protected void onResume() {
super.onResume();
//launch the animation
uiThreadHanlder.postDelayed(toolBarAnimator, 1000);
}
@Override
protected void onPause() {
super.onPause();
//stop the animation
uiThreadHanlder.removeCallbacks(toolBarAnimator);
}
工具栏在哪里:
工具栏=(工具栏)findViewById(R.id.toolbar);
执行此操作时,您将获得:
但是如果您离开动画继续,则会获得:
这就是为什么在大多数情况下,将工具栏android:layout_height设置为wrap_content是一个不错的选择,因为工具栏将根据其内容调整其高度(并且您可以在运行时更改内容:)
这也是在运行时更改工具栏大小的方式。
感谢Chris Banes在操作栏中所做的出色工作。
boolean postICS = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
layout_height
方法是可行的,我希望季风在这里描述的解决方法也不是解决方法,而是正确的方法吗?code.google.com/p/android/issues/detail?id=77874