Як оголосити панель інструментів / панель дій збільшеної висоти на Android Lollipop?


Відповіді:


144

Для цього потрібно скористатися новим віджетом панелі інструментів . Панель інструментів має спеціальну обробку для мінімальної висоти для оголошення кількості місця, яке використовується для кнопок (та дій).

У наведеному нижче прикладі ми встановлюємо висоту 128dp (що дорівнює 56dp + 72dp, як визначено в специфікації), але зберігаємо android:minHeightстандартний рівень actionBarSize(який зазвичай становить 56dp). Це означає, що кнопки та дії обмежені вертикальним розташуванням у верхній частині 56 dp. Потім ми можемо використовувати 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
Томас Келлер

3
Я б хотів також оголосити вирази для розмірів, але ми не можемо.
Chris Banes

37
Для отримання бонусних балів @dimen/action_bar_size_x2зменште розмір панелі дій із збільшенням, наприклад , і використовуйте 112dp на телефонах, 128dp на планшетах
Роман Нурік

7
android:paddingBottomвводить дивні інтервали, коли buttonGravityвстановлено значення bottom. titleMarginBottomАтрибут здається, найкращим варіантом тут, немає?
Пол Берк,

5
@RomanNurik, як працює розширена панель інструментів у програмі календаря? Будь-які підказки
Рагхунандан

3

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

І ми можемо грати більше. Ми можемо, під час виконання, грати з Height та MinimalHeight.

Висота - це висота панелі інструментів, вона проста, це розуміє кожне тіло, і гравітація діє відповідно до цієї висоти.

Мінімальна висота є більш хитрою і не повинна становити мінімум 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);

Роблячи це, ви отримуєте: введіть тут опис зображення

але якщо ви залишите анімацію продовжувати, ви отримаєте: введіть тут опис зображення

Ось чому, встановлення вашої панелі інструментів android: layout_height на wrap_content є хорошим варіантом у більшості випадків, тому що панель інструментів буде адаптувати свою висоту відповідно до її вмісту (і ви можете змінити вміст під час виконання :)

І це також, як ви змінюєте розмір панелі інструментів під час виконання.

Дякуємо Крісу Бейнсу за чудову роботу, яку ви зробили на панелі дій.


@MohammadHadi Я уявляю, що postICS було б визначено приблизно так:boolean postICS = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
dm78
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.