2014-10-29 3 views
14

Как вы знаете, высота над уровнем моря не работает на устройствах Pre-Lollipop. Из-за этого в панели приложений appcompat-v7 по умолчанию используется текстура «псевдо тени», как я ее называю, для эмуляции тени. Моя проблема в том, что мне нужно использовать собственную панель инструментов. Когда я использую настраиваемую панель инструментов, этого «псевдо тени» нет. Так что он просто выглядит ровным. Любая идея, как добавить эту тень обратно? Некоторые люди говорили на других форумах, чтобы добавить FrameLayout с передним словом «android: windowContentOverlay», который каким-то образом перекрывает ToolBar. К сожалению, я не нашел никакого способа добиться этой работы. И по какой-то причине в моем тестировании «андроид: windowContentOverlay» в любом случае невидим. Не уверен, что я делаю неправильно. :/Тень не работает при использовании панели инструментов (Lollipop appcompat-v7)

Вот Формуляр XML данные для моей панели инструментов:

<android.support.v7.widget.Toolbar 
    android:id="@+id/my_awesome_toolbar" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:minHeight="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

Вот как это выглядит с по умолчанию AppCompat AppBar на: http://imgur.com/0EiE1Vv

Вот как это выглядит с пользовательским ToolBar: http://imgur.com/GGEC6Tq

Редактировать: С помощью alanv я выяснил, как сделать тень под панелью инструментов. Тем не менее, это не то же самое, что и по умолчанию в AppCompat. Это только слабая тень, и если я правильно помню, это тот же теневой ресурс, который использовался в более старых версиях. Мне очень трудно найти ресурс для стандартной панели AppCompat.

+1

переднего плана должен быть установлен с помощью Android: передний план = "андроид: атр/windowContentOverlay".FrameLayout должен быть ниже вашей панели инструментов и должен содержать ваше содержимое приложения. – alanv

+1

Спасибо за подсказку. На самом деле это * создало тень, хотя она довольно слабая. К сожалению, не совсем то, что я ищу. Может быть, есть другой ресурс, чем windowContentOverlay, который делает это? Кажется, я ничего не могу найти. – Michael

+0

@Phascinate вы нашли подходящие ресурсы для обоих наложений, панели инструментов и контента ниже? Похоже, это два разных оверлея, и я ищу ресурсы для достижения результата, аналогичного панели инструментов. – tomrozb

ответ

0

я бы просто иметь пользовательскую XML тень, с ImageView

<ImageView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/shadow" 
android:layout_height="@dimen/shadow_height" 
android:layout_width="match_parent" 
android:src="@drawable/shadow_shape" 
    /> 

и его образом ресурс shadow_shape.xml в вашей вытяжке папки:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
<gradient android:startColor="@color/shadow" 
    android:endColor="@color/transparent" 
    android:angle="-90" /> 
</shape> 

Вы можете получить довольно хорошие результаты по по модулю @dimen/shadow_height и @color/shadow в соответствии с вашими потребностями (темнее @color/shadow & чем выше вид, тем выше ваша поддельная высота). Это не родной, а очень настраиваемый.

1

Вы поместите его под панель инструментов.

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <View 
     android:layout_width="match_parent" 
     android:layout_height="5dp" 
     android:background="@drawable/toolbar_shadow" /> 
</FrameLayout> 

@ вытяжке/toolbar_shadow:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
<gradient 
    android:startColor="@android:color/transparent" 
    android:endColor="#88333333" 
    android:angle="90"/> 
</shape> 
1

Я рекомендовал бы использовать два различных макетов (один для версии 21 и один для всех остальных) и включить их в макете с помощью:

<include layout="@layout/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

Пример: https://gist.github.com/P0T4T0x/fbd2151bb40d3bd635d0

1

Чтобы показать тень под вашу toolb пожалуйста, используйте AppBarLayout в библиотеке поддержки дизайна Google Android. Вот пример того, как его следует использовать.

<android.support.design.widget.AppBarLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 
    <android.support.v7.widget.Toolbar 
      android:layout_height="?attr/actionBarSize" 
      android:layout_width="match_parent"/> 
    </android.support.design.widget.AppBarLayout> 

Чтобы использовать Google Android Design Поддержка библиотеки введите следующую команду в файл build.gradle:

compile 'com.android.support:design:22.2.0' 
Смежные вопросы