Высота не работает на LinearLayout
После поиска решения я не нашел решения для решения моей проблемы.
У меня есть некоторое повышение, которое создает тень на большой части моего приложения.
Но в определенном месте я не могу заставить его работать.
(Здесь, где я поставил стрелку на картинке ниже)
![введите описание изображения здесь]()
Белая область под панелью инструментов - Fragment
, которая отображает LinearLayout
расположение:
<LinearLayout
android:id="@+id/panelAddress"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/button_flat_white"
android:elevation="10dp"
android:orientation="vertical"
android:padding="20dp"
>
//some content
</LinearLayout>
Родитель Фрагмента:
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawerLayout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
android:id="@+id/custom_toolbar"
layout="@layout/toolbar"/>
<RelativeLayout
android:id="@+id/mapLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/map"
class="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<FrameLayout
android:id="@+id/fragment_container_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
/>
<FrameLayout
android:id="@+id/fragment_container_bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
У вас есть представление о том, почему я не получаю свое повышение?
Ответы
Ответ 1
Как описано здесь fooobar.com/questions/35176/..., существует несколько требований, чтобы тень рисовалась:
-
Пространство для тени в группе просмотра родителей. Как упоминалось в описании bleeding182, отступы могут вызвать обрезание тени:
(НЕ используйте отступы. Отступ на рамке также отключит тень)
Однако это может быть исправлено с android:clipToPadding="false"
в родительском.
-
В увеличенном представлении должен быть фон для создания тени. Без информации о вашем @drawable/button_flat_white
я не могу сказать, является ли это проблемой в вашем случае.
Чтобы решить вашу проблему, вы должны изменить свой FrameLayout следующим образом:
<FrameLayout
android:id="@+id/fragment_container_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:clipToPadding="false"
android:paddingBottom="10dp"/>
Чтобы проверить, не вызывает ли ваш @drawable/button_flat_white
какие-либо проблемы, временно изменить фон LinearLayout на простой цвет:
<LinearLayout
android:id="@+id/panelAddress"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="10dp"
android:orientation="vertical"
android:padding="20dp"
android:background="#fff">
//some content
</LinearLayout>
Ответ 2
Просто создайте CardView как родительский элемент LinearLayout, и вы сможете достичь повышения.
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
card_view:cardUseCompatPadding="true"
card_view:cardElevation="4dp"
card_view:cardCornerRadius="3dp">
<LinearLayout
android:id="@+id/panelAddress"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/button_flat_white"
android:orientation="vertical"
android:padding="20dp">
//some content
</LinearLayout>
</android.support.v7.widget.CardView>
Ответ 3
Это проблема с рисунком.
Тень отбрасывается за пределы фактических границ вида, поэтому, если макет родителя не "дает" представление достаточно места, оно будет обрезано.
Так как родительский фрагмент (Linear layout) имеет тот же размер, тень обрезается. Добавьте поле вниз в LinearLayout.
Если это не помогает, попробуйте обернуть макет с помощью FrameLayout с небольшим отрывом снизу (НЕ используйте отступы. Отметка на рамке также отключит тень)
1-2dp должен делать.
Ответ 4
Надеюсь, это поможет вам, просто добавьте "marginTop" во второй макет.
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="90dp"
android:orientation="vertical"
android:elevation="5dp"
/>
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="match_parent"
android:layout_height="90dp"
android:orientation="vertical"
android:padding="5dp"
android:layout_marginTop="3dp"
/>
Ответ 5
Я использую padding Right и padding bottom (для тени внизу и справа от макета), он будет работать для меня, показывает его тень, в противном случае проблема с теневой обработкой не работает. Сделайте так, если вы столкнулись с одной и той же проблемой.
Ответ 6
Включите опцию hardwardAccelerated в файле манифеста,
<application
...
android:hardwareAccelerated="true">