티스토리 뷰
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:
하지만 여기에는 그림자가 없는 목록 항목이 표시됩니다.
I have also tried the following to no avail:
다음과 같이 시도해 보았지만 효과가 없었습니다:
- Set the elevation to the ImageView and TextViews themselves instead of the parent layout.
- Applied a background to the ImageView.
- 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에서 그림자에 대해 조금 실험해 보았는데, 다음과 같은 것을 발견했습니다.
- It appears that a parent
ViewGroup
's bounds cutoff the shadow of its children for some reason; and - shadows set with
android:elevation
are cutoff by theView
's bounds, not the bounds extended through the margin; - 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:
저의 제안은 다음과 같습니다:
- 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; - set
android:clipToPadding="false"
on the sameRelativeLayout
; - Remove the margin from the
RelativeLayout
that also has elevation set; - [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
'개발 > 안드로이드' 카테고리의 다른 글
Glide를 사용하여 이미지를 비트맵으로 다운로드하기 (0) | 2023.02.05 |
---|---|
세로 모드 강제 적용하기 (0) | 2023.02.04 |
AppCompat에서 전체 화면 적용하기 (0) | 2023.02.02 |
AsyncTask deprecated 이후 대안 솔루션 (0) | 2023.02.02 |
Spinner에서 선택한 아이템을 위치가 String으로 찾는 방법 (0) | 2023.02.02 |