Nano Hash - криптовалюты, майнинг, программирование

После перехода на панель инструментов API 21 моя полноэкранная строка состояния активности наполовину закрывает мою панель инструментов.

В моем приложении я использую эти флаги для полноэкранного видео. При взаимодействии с пользователем я показываю панели навигации/состояния/инструментов. Я использую новый API 21 AppCompat с панелями инструментов.

Это флаги, которые я использую при отображении полос:

int newVis = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE

Затем вызов:

mDecorView.setSystemUiVisibility( newVis );

Это работало до перехода на панели инструментов L. Предположительно, теперь панель инструментов частично закрыта строкой состояния, потому что она является частью макета действий. Я думаю, я мог бы переместить панель инструментов вниз на статическую величину, равную высоте строки состояния, но это кажется хакерским. Есть ли правильный способ сделать это?

Мое приложение поддерживает Android 4.1+. Как я уже сказал, этого не произошло до того, как я начал использовать панели инструментов, но это происходит на Android 4.1–5.0.


Ответы:


1

В конце концов, исправление потребовало выполнения некоторых измерений, чтобы определить размер панели действий и панели навигации. Потому что на устройствах размером с телефон в альбомной ориентации программная панель навигации оказывается в правой части дисплея, а также закрывает панель инструментов. Приведенное ниже исправление должно работать как минимум на Android от API-16 до API-21. Последняя часть кода предназначена только для сброса одежды для панели инструментов, которая по какой-то причине без этого кода значки на панели действий не выровнены правильно (они были ближе к верху). Надеюсь, это поможет другим людям.

// Get the root activity layout id
            RelativeLayout root = (RelativeLayout) findViewById( R.id.container );
            root.post( new Runnable()
            {
                public void run()
                {
                    Point size = new Point();
                    Display display = getWindowManager().getDefaultDisplay();
                    if ( Integer.valueOf( android.os.Build.VERSION.SDK ) >= Build.VERSION_CODES.JELLY_BEAN_MR1 )
                    {
                        // This is only available on api 17 and higher
                        display.getRealSize( size );
                    }
                    else
                    {
                        // On api 16 and less this should work
                        display.getSize( size );
                    }

                    int screenWidth = size.x;

                    Rect rect = new Rect();
                    Window win = getWindow();  // Get the Window
                    win.getDecorView().getWindowVisibleDisplayFrame( rect );
                    // Get the height of Status Bar 
                    int statusBarHeight = rect.top;
                    int navBarWidth = screenWidth - rect.width();

                    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mToolbar.getLayoutParams();

                    android.util.TypedValue value = new android.util.TypedValue();
                    getTheme().resolveAttribute( android.R.attr.actionBarSize, value, true );
                    TypedValue.coerceToString( value.type, value.data );
                    android.util.DisplayMetrics metrics = new android.util.DisplayMetrics();
                    getWindowManager().getDefaultDisplay().getMetrics( metrics );
                    params.height = (int) value.getDimension( metrics );

                    params.setMargins( 0, statusBarHeight, navBarWidth, 0 );
                    mToolbar.setLayoutParams( params );
                }
            } );

Также часть root.post(Runnable...) связана с тем, что мы не можем измерить окно, пока не завершится oncreate.

29.01.2015

2

Я решил это, добавив макет кадра (высота @dimen/statusbarheight). Затем вы можете установить высоту для каждой версии и режима.

Несколько примеров: attrs.xml:

<dimen name="statusbarheight">0dp</dimen>

attrs.xml v21:

<dimen name="statusbarheight">25dp</dimen>

attrs.xml v21 земли:

<dimen name="statusbarheight">0dp</dimen>

Когда я установил полупрозрачную панель навигации внутри стиля, у меня возникла та же проблема.

27.01.2015
  • Это не работает. 25 дп не хватает высоты. Также я не уверен, что высота одинакова на всех устройствах. Или это? 27.01.2015
  • Стандартная высота — 24 dp, но я беспокоюсь, что это можно изменить с помощью некоторых приложений для создания тем. 27.01.2015
  • Я попробовал приложение в nexus 5 и nexus one и 25 dp, чтобы решить мою проблему. 24 dp, как говорят метрики Google, для меня неправильно. 27.01.2015
  • Это видео тестирует мое приложение в jb, kk и lollipop в портретном и ландшафтном режимах с полупрозрачным навигационным ящиком над строкой состояния: youtu .be/gHPoCAHfQtg 27.01.2015
  • Не забудьте также отключить полупрозрачную панель навигации в ландшафтном режиме (добавление дополнительных логических значений в ваши файлы attrs) 27.01.2015
  • Я не уверен, что строка состояния всегда имеет одинаковую высоту для всех разрешений и производителей и т. д. 27.01.2015

  • 3

    Я думаю, у вас была бы похожая проблема на KITKAT. См. DrawInsetsFrameLayout сущность Романа Нурика. Макет должен позаботиться о любых дополнительных отступах и раскрасить их.

    27.01.2015
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..