Подтвердить что ты не робот

Высота не работает на 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>

У вас есть представление о том, почему я не получаю свое повышение?

4b9b3361

Ответ 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">