Как объявить панель инструментов с расширенной высотой/панель действий на Android Lollipop?

Я видел панель приложений с расширенными высотами в советах Google App Bar. Как реализовать их в Android Lollipop?

Ответ 1

Чтобы достичь этого, вам нужно использовать новый виджет Toolbar. Панель инструментов имеет специальную обработку для минимальной высоты, чтобы объявить объем пространства, который используется для кнопок (и действий).

В приведенном ниже примере мы устанавливаем высоту 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 вместо этого и используйте его атрибуты.

Ответ 2

Спасибо за ваш вопрос, его ответ и, более того, за реализацию панели инструментов в native и supportlibrary:)

И мы можем играть больше. Мы можем во время выполнения играть с высотой и минимальным весом.

Высота - высота ToolBar, она проста, каждое тело понимает, и сила тяжести действует в соответствии с этой высотой.

Минимальная высота более сложная и не должна быть не менее 56dp. Этот minHeight используется для размещения строки вашего меню. Эта линия находится в середине вашего 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);

При этом вы получаете: enter image description here

но если вы оставите анимацию, вы получите: enter image description here

Вот почему настройка вашего андроида панели инструментов: layout_height для wrap_content - хороший вариант в большинстве случаев, потому что панель инструментов будет адаптировать ее высоту в соответствии с ее содержимым (и вы можете изменить содержимое во время выполнения:)

И это также то, как вы меняете размер панели инструментов во время выполнения.

Спасибо Chris Banes за потрясающую работу, которую вы сделали на панели действий.