티스토리 뷰

반응형

Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.

Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.

 

아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

Android "elevation" not showing a shadow

안드로이드 "elevation"이 그림자를 표시하지 않습니다.

 문제 내용 

I have a ListView, and with each list item I want it to show a shadow beneath it. I am using Android Lollipop's new elevation feature to set a Z on the View that I want to cast a shadow, and am already doing this effectively with the ActionBar (technically a Toolbar in Lollipop). I am using Lollipop's elevation, but for some reason it isn't showing a shadow under the list items. Here is how each list item's layout is set up:

저는 ListView가 있습니다. 각 목록 항목마다 그림자를 표시하려고 합니다. Android Lollipop의 새로운 Elevation 기능을 사용하여 그림자를 만들고자 하는 View에 Z를 설정하고, ActionBar (Lollipop에서는 기술적으로 Toolbar)에서 이미 효과적으로 수행하고 있습니다. 저는 Lollipop의 Elevation을 사용하지만, 목록 항목 아래에 그림자가 나타나지 않는 이유를 모르겠습니다. 각 목록 항목의 레이아웃이 다음과 같이 설정되어 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    style="@style/block"
    android:gravity="center"
    android:layout_gravity="center"
    android:background="@color/lightgray"
    >

    <RelativeLayout
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="20dp"
        android:elevation="30dp"
        >

        <ImageView
            android:id="@+id/documentImageView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop" />

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/alphared"
            android:layout_alignParentBottom="true" >

            <appuccino.simplyscan.Extra.CustomTextView
                android:id="@+id/documentName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="@color/white"
                app:typeface="light"
                android:paddingLeft="16dp"
                android:paddingTop="8dp"
                android:paddingBottom="4dp"
                android:singleLine="true"
                android:text="New Document"
                android:textSize="27sp"/>

            <appuccino.simplyscan.Extra.CustomTextView
                android:id="@+id/documentPageCount"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="@color/white"
                app:typeface="italic"
                android:paddingLeft="16dp"
                android:layout_marginBottom="16dp"
                android:text="1 page"
                android:textSize="20sp"/>

        </LinearLayout>

    </RelativeLayout>

</RelativeLayout>

 

However, here is how it shows the list item, without a shadow:

enter image description here

하지만 여기에는 그림자가 없는 목록 항목이 표시됩니다.

 

I have also tried the following to no avail:

다음과 같이 시도해 보았지만 효과가 없었습니다:

 

  1. Set the elevation to the ImageView and TextViews themselves instead of the parent layout.
  2. Applied a background to the ImageView.
  3. Used TranslationZ in place of Elevation.
1. 부모 레이아웃이 아닌 ImageView와 TextView 자체에 elevation을 설정합니다.
2. ImageView에 배경을 적용합니다.
3. Elevation 대신 TranslationZ를 사용합니다.

 

 

 

 높은 점수를 받은 Solution 

I've been playing around with shadows on Lollipop for a bit and this is what I've found:

Lollipop에서 그림자에 대해 조금 실험해 보았는데, 다음과 같은 것을 발견했습니다.

 

  1. It appears that a parent ViewGroup's bounds cutoff the shadow of its children for some reason; and
  2. shadows set with android:elevation are cutoff by the View's bounds, not the bounds extended through the margin;
  3. the right way to get a child view to show shadow is to set padding on the parent and set android:clipToPadding="false" on that parent.
1. 일부 이유로 부모 ViewGroup의 경계가 그의 자식 뷰의 그림자를 잘라냅니다.
2. android:elevation으로 설정된 그림자는 마진을 통해 확장된 경계가 아니라 View의 경계에서 잘리게 됩니다.
3. 자식 뷰의 그림자를 표시하는 올바른 방법은 부모에게 패딩을 설정하고 android:clipToPadding="false"를 설정하는 것입니다.

 

Here's my suggestion to you based on what I know:

저의 제안은 다음과 같습니다:

 

  1. Set your top-level RelativeLayout to have padding equal to the margins you've set on the relative layout that you want to show shadow;
  2. set android:clipToPadding="false" on the same RelativeLayout;
  3. Remove the margin from the RelativeLayout that also has elevation set;
  4. [EDIT] you may also need to set a non-transparent background color on the child layout that needs elevation.
1. 그림자를 보여줄 상대적 레이아웃에 설정한 마진과 동일한 패딩을 가진 최상위 RelativeLayout을 설정하십시오.
2. 동일한 RelativeLayout에서 android:clipToPadding="false"을 설정하십시오.
3. 그림자가 설정된 RelativeLayout에서 마진을 제거하십시오.
4. [편집] 또한, 고도가 필요한 하위 레이아웃에 불투명한 배경색을 설정해야 할 수도 있습니다.

 

At the end of the day, your top-level relative layout should look like this:

결국, 최종적으로 여러분의 최상위 상대적 레이아웃은 다음과 같아야 합니다:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    style="@style/block"
    android:gravity="center"
    android:layout_gravity="center"
    android:background="@color/lightgray"
    android:paddingLeft="40dp"
    android:paddingRight="40dp"
    android:paddingTop="20dp"
    android:paddingBottom="20dp"
    android:clipToPadding="false"
    >

 

The interior relative layout should look like this:

내부 상대 레이아웃은 다음과 같아야 합니다:
<RelativeLayout
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:background="[some non-transparent color]"
    android:elevation="30dp"
    >

 

 

 가장 최근 달린 Solution 

If it still not showing elevation try

여전히 고도가 표시되지 않으면 다음을 시도해보세요.
    android:hardwareAccelerated="true" 

 

this will definitely help you.

이 방법은 분명히 도움이 될 것입니다.

 

 

 

출처 : https://stackoverflow.com/questions/27477371/android-elevation-not-showing-a-shadow

반응형
댓글
공지사항
최근에 올라온 글