2017-02-21 4 views
1

Фактический результат: Строка состояния отображается над панелью действий Toolbar и MenuItem внутри панели действия отключена. Примечание: «Тест» - это панель действий title.Прозрачная строка состояния перекрывается панель действия

JankActionBar

Ожидаемый результат: Верхней граница панели действий Toolbar должен появиться непосредственно под нижней границей строки состояния и любые MenuItem s внутри панели действий должны быть видны полностью. XML макет

Activity в:

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/layout_root" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:id="@+id/image_background" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scaleType="centerCrop" 
     android:src="@drawable/background" 
     tools:ignore="ContentDescription"/> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/action_bar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="@android:color/transparent" 
     android:fitsSystemWindows="true" 
     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

</FrameLayout> 

Панель действий title и MenuItem добавляются во время выполнения.

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.test); 

    setSupportActionBar((Toolbar) findViewById(R.id.action_bar)); 
    ActionBar actionBar = getSupportActionBar(); 
    assert actionBar != null; 
    actionBar.setDisplayHomeAsUpEnabled(false); 
    actionBar.setTitle("Test"); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_test, menu); 
    return true; 
} 

Прежде чем я добавил fitsSystemWindows="true" к Toolbar зрения, в строке состояния еще наслаивала панель действий, но «СКИП» MenuItem был центрирован в панели действий, заставляя его появляться частично под строку состояния. Я ожидал, что флаг fitsSystemWindows=true даст мне ожидаемый результат (упомянутый выше), но этого не произошло. Это как если бы fitsSystemWindows="true" правильно позиционировал кнопку «ПРОПУСТИТЬ», но не отрегулировал положение самой панели действий. Кто-нибудь знает, что может быть проблемой здесь?

EDIT: Я понимаю, что я мог бы удалить fitsSystemWindows="true" и добавить marginTop="...statusBarHeight" к Toolbar зрения, но я ищу для более чистого способа решить эту проблему.

+0

вы можете поделиться полным файлом макета? и изображение предварительного просмотра макета? Я не могу увидеть тест и пропустить код кнопки в макете. – rahul

+0

Это случается с другим макетом? –

+0

@rahul, может быть, Ryan добавить название и пункт меню программно, а не в xml –

ответ

0

Попробуйте переместить панель инструментов в AppBarLayout.

Как это:

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

<android.support.v7.widget.Toolbar 
     android:id="@+id/action_bar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="@android:color/transparent" 
     android:fitsSystemWindows="true" 
     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

<AppBarLayout/> 
3

Моя проблема была из-за меня установив Toolbar «s layout_height к ?attr/actionBarSize. Первоначально я думал, что fitsSystemWindows переустанавливает Toolbar, но вместо этого он добавляет дополнение. Поэтому, когда верхнее дополнение добавляется к Toolbar, содержимое Toolbar сбрасывается вниз. Поскольку высота Toolbar фиксирована, содержимое подталкивается ниже нижней границы контейнера. Я решил установить ?attr/actionBarSize в качестве значения атрибута ToolbarminHeight, чтобы решить эту проблему. Ниже мои обновленный Toolbar:

<android.support.v7.widget.Toolbar 
    android:id="@+id/action_bar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?attr/actionBarSize" 
    android:background="@android:color/transparent" 
    android:fitsSystemWindows="true" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

Caveat: Это работает, если вы не желая, чтобы показать что-либо непосредственно под строкой действия с высоты панели действий, за ту или иную причину, примерно в два раза выше что он должен содержать одну строку домашнего значка, заголовка и/или пунктов меню. Если кто-то знает способ достижения неперекрывающейся строки состояния и панели действий нормального размера, пожалуйста, поделитесь своим пониманием. Я был бы навсегда благодарен.

HugeActionBar

обновление Caveat: Хорошо. Таким образом, очевидно, что в моем баре действия было дополнительное, нижнее дополнение эквивалентно высоте панели навигации, потому что я установил <item name="android:windowTranslucentNavigation">true</item> на мою тему Activity. Я проверил это, удалив атрибут windowTranslucentNavigation. Я тестирую это на 7.1 Pixel, используя Android Support Libraries v25.1.1.

+0

Добавлен caveat ... – Ryan

+1

Это решение не существует для экранов, для которых требуется панель действий нормального размера с 'layout_height' ='? Attr/actionBarSize'. Я не нашел для этого решения. :/ – Ryan

+0

Что помогло мне сохранить статус-бис полупрозрачный (почти такой же цвет, как и панель инструментов), и панель инструментов нужного размера, заключалась в том, чтобы поместить весь контент в координаторский макет в xml. – shtolik

Смежные вопросы