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

88

Я видел расширенную высоту приложения бара в Google Design App Bar руководстве. Как реализовать это в Android Lollipop?

Крис Бэйнс
источник

Ответы:

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- это путь, я ожидаю, что обходной путь, описанный здесь monsoon, также не обходной путь, а правильный путь? code.google.com/p/android/issues/detail?id=77874
Томас Келлер,
3
Я бы тоже хотел иметь возможность объявлять выражения для измерений, но мы не можем.
Крис Бэйнс,
37
Чтобы получить бонусные баллы, @dimen/action_bar_size_x2измените размер панели действий с шагом, например , и используйте 112dp на телефонах, 128dp на планшетах
Роман Нурик
7
android:paddingBottomвводит странный интервал, когда buttonGravityустановлен на bottom. titleMarginBottomАтрибут кажется, лучшим вариантом здесь, нет?
Пол Берк
5
@RomanNurik как работает расширенная панель инструментов в приложении календаря? Любые намеки
Рагхунандан
3

Спасибо за ваш вопрос, его ответ и тем более за реализацию панели инструментов в родной и вспомогательной библиотеке :)

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

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

MinimalHeight более сложен и не должен быть минимум 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 в большинстве случаев является хорошим вариантом, потому что панель инструментов будет адаптировать свою высоту в соответствии с ее содержимым (и вы можете изменить содержимое во время выполнения :)

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

Спасибо Крису Бэйнсу за отличную работу над панелью действий.

Матиас Сеги Android2ee
источник
@MohammadHadi Я представляю, что postICS можно определить примерно так:boolean postICS = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
dm78