如何在Android Lollipop上声明扩展高度的工具栏/操作栏?


Answers:


144

您需要使用新的工具栏小部件来实现此目的。工具栏具有特殊的处理方式,因为它声明了用于按钮(和操作)的空间的最小高度。

在下面的示例中,我们将高度设置为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并使用其属性。


3
如果使用layout_height方法是可行的,我希望季风在这里描述的解决方法也不是解决方法,而是正确的方法吗?code.google.com/p/android/issues/detail?id=77874
Thomas Keller

3
我也很想能够声明维的表达式,但是我们不能。
克里斯·巴内斯

37
对于奖励积分,请使用增量来设置操作栏的大小,例如@dimen/action_bar_size_x2,并在手机上使用112dp,在平板电脑上使用128dp
Roman Nurik

7
android:paddingBottombuttonGravity设置为时会引入奇怪的间距bottom。该titleMarginBottom属性似乎是更好的选择,不是吗?
保罗·伯克

5
@RomanNurik日历应用程序中展开的工具栏如何工作?任何提示
Raghunandan

3

感谢您的问题,答案以及本机和支持库中工具栏的实现:)

而且我们可以玩更多。我们可以在运行时使用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在操作栏中所做的出色工作。


@MohammadHadi我在想postICS应该定义为:boolean postICS = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
dm78 '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.