Android에서 선형 레이아웃 주위에 그림자를 표시하는 방법은 무엇입니까?


79

선형 레이아웃에 그림자를 표시하려면 어떻게해야합니까? 선형 레이아웃 주위에 그림자가있는 흰색 둥근 배경을 원합니다. 나는 지금까지 이것을했다.

<LinearLayout
 android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="@xml/rounded_rect_shape"
android:orientation="vertical"
android:padding="10dp">
<-- My buttons, textviews, Imageviews go here -->
</LinearLayout>

그리고 xml 디렉토리 아래의 rounded_rect_shape.xml

 <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="rectangle" >

   <solid android:color="#ffffff" />

   <corners
      android:bottomLeftRadius="3dp"
      android:bottomRightRadius="3dp"
      android:topLeftRadius="3dp"
      android:topRightRadius="3dp" />
</shape>

답변:


28

Android에는 그림자를 표시하는 이러한 속성이 없습니다. 그러나 가능한 방법은 다음과 같습니다.

  1. 회색 색상의 일반 LinearLayout을 추가하고, 그 위에 실제 레이아웃을 추가하고 아래쪽에 여백이 있고 오른쪽은 1 또는 2dp와 같습니다.

  2. 그림자가있는 9 패치 이미지를 가지고 선형 레이아웃의 배경으로 설정하십시오.


9 패치가 가장 좋은 방법입니다!
Andranik 2015 년

커스텀 폴리곤에 9 패치를 사용하는 방법이 있습니까? 이 도구의 시도 inloop.github.io/shadow4android을 하지만, 그것은 단지에 대한 그림자를 생성 타원형 / 사각형 모양
rimes

144

LinearLayoout의 배경 역할을 할 레이어 목록을 구현하여 문제에 대한 또 다른 해결책이 있습니다.

background_with_shadow.xml 파일을 res/drawable. 포함 :

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item >
        <shape 
            android:shape="rectangle">
        <solid android:color="@android:color/darker_gray" />
        <corners android:radius="5dp"/>
        </shape>
    </item>
    <item android:right="1dp" android:left="1dp" android:bottom="2dp">
        <shape 
            android:shape="rectangle">
        <solid android:color="@android:color/white"/>
        <corners android:radius="5dp"/>
        </shape>
    </item>
</layer-list>

그런 다음 LinearLayout에서 레이어 목록을 배경으로 추가하십시오.

<LinearLayout
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:background="@drawable/background_with_shadow"/>

와! 나는 이것의 일부를 만들었고 그렇게 좋아 보이지 않습니다. 홀로 스탠드를 찾고 있다면 완벽 해 보입니다. 고마워 친구.
jfcogato

좋은 효과, 감사합니다 !! 그러나 내가 가진 한 가지 사소한 문제가 있습니다. 그림자는 실제로 흰색 레이아웃 옆에 있지 않지만 중앙 공간을 공유합니다. 내가 말하는 것이 충분히 명확하지 않으면 1dp 대신 100dp로 동일한 코드를 시도하십시오. 나는 대부분의 경우에 보이지 않지만 누군가 나에게 해결책을 제공 할 수 있다면 완벽 할 것입니다!
Poutrathor 2010 년

1
@Poutrathor, 흥미롭게도 그 문제를 발견했습니다. 안타깝게도 현재 제공 할 다른 솔루션이 없습니다. 달성하려는 것이 무엇입니까? 누군가가 당신의 문제에 대해 더 도움을 줄 수 있습니다.
muthee

"당신이 성취하려는 것이 무엇입니까?" 물론 완벽합니다! 농담입니다. 알아 차려서 신고합니다. 당신의 솔루션은 트렌디 한 매우 짧은 섀도우에 정말 좋으며 지금 행복하게 사용하고 있습니다. 나는 당신에게 더 많은
찬성 투표를

3
추가하려면 위쪽 모양이 그림자 (!)이고 아래쪽 모양이 주요 큰 부분입니다.
sandalone

30

글쎄, 이것은 달성하기 쉽습니다.

GradientDrawable그림자를 가지려는 뷰에 모양을 가깝게 배치하기 위해 부모 관계를 사용하는 것보다 검정색에서 나오고 투명한 색상으로가는 a 를 빌드 한 다음 높이 또는 너비에 값을 지정하면됩니다.

다음은이 파일을 내부 res/drawable에 생성해야하는 예입니다. 이름은 다음과 shadow.xml같습니다.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <gradient
        android:startColor="#9444"
        android:endColor="#0000"
        android:type="linear"
        android:angle="90"> <!-- Change this value to have the correct shadow angle, must be multiple from 45 -->
    </gradient>

</shape>

A로부터 위의 다음 코드를 넣습니다 LinearLayout예를 들어, 설정 android:layout_widthandroid:layout_heightfill_parent하고 2.3dp, 당신은 당신에 좋은 그림자 효과를해야합니다 LinearLayout.

<View
    android:id="@+id/shadow"
    android:layout_width="fill_parent"
    android:layout_height="2.3dp"  
    android:layout_above="@+id/id_from_your_LinearLayout" 
    android:background="@drawable/shadow">
</View>

1 주 : 당신이 증가하면 android:layout_height더 그림자가 표시됩니다.

참고 2 :android:layout_above="@+id/id_from_your_LinearLayout" 이 코드를 RelativeLayout 내에 배치하는 경우 속성을 사용 하고 그렇지 않으면 무시하십시오.

누군가를 돕기를 바랍니다.


안녕하세요 ... 나는 이것이 오래되었다는 것을 알고 있습니다 ...하지만 직사각형 뷰 구조 주위에 그림자 효과를 얻는 유일한 방법은 다른 직사각형 구조를 만든 다음 그에 따라 정렬하는 것입니까 ??? ... 감사합니다 ... 나는 안드로이드에 새로운 ...
dsdsdsdsd

안녕하세요 @dsdsdsdsds 머티리얼 디자인이 많은 디자인 리소스를 도입했기 때문에 이것이 그림자 효과를 얻는 유일한 방법인지 확실하지 않습니다.
Murillo Ferreira

18

롤리팝 이상에서는 고도 를 사용할 수 있습니다 .

이전 버전의 경우 :

다음은 게으른 해킹입니다. http://odedhb.blogspot.com/2013/05/android-layout-shadow-without-9-patch.html

(toast_frame은 KitKat에서 작동하지 않으며 그림자는 토스트에서 제거되었습니다)

다음을 사용하십시오.

android:background="@android:drawable/toast_frame"

또는:

android:background="@android:drawable/dialog_frame"

배경으로

예 :

<TextView
        android:layout_width="fill_parent"
        android:text="I am a simple textview with a shadow"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:padding="16dp"
        android:textColor="#fff"
        android:background="@android:drawable/toast_frame"
        />

그리고 다른 bg 색상으로 :

<LinearLayout
        android:layout_height="64dp"
        android:layout_width="fill_parent"
        android:gravity="center"
        android:background="@android:drawable/toast_frame"
        android:padding="4dp"
        >
    <Button
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:text="Button shadow"
            android:background="#33b5e5"
            android:textSize="24sp"
            android:textStyle="bold"
            android:textColor="#fff"
            android:layout_gravity="center|bottom"
            />

</LinearLayout>

또한 android:background="@android:drawable/alert_light_frame"흰색을위한
abbasalim

12

이것을 시도하십시오 .. layout_shadow.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#CABBBBBB"/>
            <corners android:radius="2dp" />
        </shape>
    </item>

    <item
        android:left="0dp"
        android:right="0dp"
        android:top="0dp"
        android:bottom="2dp">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white"/>
            <corners android:radius="2dp" />
        </shape>
    </item>
</layer-list>

다음과 같이 레이아웃에 적용하십시오.

 android:background="@drawable/layout_shadow"

7

나는 이것이 오래되었다는 것을 알고 있지만 대부분의 답변에는 많은 추가 코드가 필요합니다.

밝은 색상의 배경이있는 경우 다음을 사용하면됩니다.

android:elevation="25dp"

코드가 몇 줄이 아니라 모든 장치에서 코드가 작동해야합니다. 제안한 고도는 API 21 이상에서만 작동합니다
musooff

6

실제로 @odedbreiner에 동의하지만 첫 번째 레이어 안에 dialog_frame을 넣고 흰색 레이어 아래에 검은 색 배경을 숨 깁니다.

    <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@android:drawable/dialog_frame"
        android:right="2dp" android:left="2dp" android:bottom="2dp" android:top="5dp" >
        <shape android:shape="rectangle">
            <corners android:radius="5dp"/>
        </shape>
    </item>
    <item>
        <shape
            android:shape="rectangle">
            <solid android:color="@android:color/white"/>
            <corners android:radius="5dp"/>
        </shape>
    </item>
</layer-list>

2
  1. 이 9.png를 저장하십시오. (이름을으로 변경 9.png)

여기에 이미지 설명 입력

당신의 그것을 한 2.Save drawable.

3. 레이아웃에 설정하십시오.

4. 패딩을 설정합니다.

예 :

<LinearLayout  
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:background="@drawable/shadow"
  android:paddingBottom="6dp"
  android:paddingLeft="5dp"
  android:paddingRight="5dp"
  android:paddingTop="6dp"
>

.
.
.
</LinearLayout>

2

다음 코드를 사용하여 DRAWABLE에서 "shadow.xml"이라는 예제로 새 XML을 만듭니다 (수정하거나 더 나은 것을 찾을 수 있음).

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/middle_grey"/>
        </shape>
    </item>

    <item android:left="2dp"
          android:right="2dp"
          android:bottom="2dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/white"/>
        </shape>
    </item>

</layer-list>

LinearLayout 또는 음영을 만들려는 다른 위젯에서 XML을 만든 후 BACKGROUND 속성을 사용하여 효과를 확인합니다. 다음과 같습니다.

<LinearLayout
    android:orientation="horizontal"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:paddingRight="@dimen/margin_med"
    android:background="@drawable/shadow"
    android:minHeight="?attr/actionBarSize"
    android:gravity="center_vertical">

1

xml 태그에 다음 클래스를 사용할 수 있습니다.

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.Rect;
import android.os.Build;
import android.support.annotation.FloatRange;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.FrameLayout;

import com.webappmate.weeassure.R;

/**
 * Created by GIGAMOLE on 13.04.2016.
 */
public class ShadowLayout extends FrameLayout {

    // Default shadow values
    private final static float DEFAULT_SHADOW_RADIUS = 30.0F;
    private final static float DEFAULT_SHADOW_DISTANCE = 15.0F;
    private final static float DEFAULT_SHADOW_ANGLE = 45.0F;
    private final static int DEFAULT_SHADOW_COLOR = Color.DKGRAY;

    // Shadow bounds values
    private final static int MAX_ALPHA = 255;
    private final static float MAX_ANGLE = 360.0F;
    private final static float MIN_RADIUS = 0.1F;
    private final static float MIN_ANGLE = 0.0F;
    // Shadow paint
    private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG) {
        {
            setDither(true);
            setFilterBitmap(true);
        }
    };
    // Shadow bitmap and canvas
    private Bitmap mBitmap;
    private final Canvas mCanvas = new Canvas();
    // View bounds
    private final Rect mBounds = new Rect();
    // Check whether need to redraw shadow
    private boolean mInvalidateShadow = true;

    // Detect if shadow is visible
    private boolean mIsShadowed;

    // Shadow variables
    private int mShadowColor;
    private int mShadowAlpha;
    private float mShadowRadius;
    private float mShadowDistance;
    private float mShadowAngle;
    private float mShadowDx;
    private float mShadowDy;

    public ShadowLayout(final Context context) {
        this(context, null);
    }

    public ShadowLayout(final Context context, final AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public ShadowLayout(final Context context, final AttributeSet attrs, final int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        setWillNotDraw(false);
        setLayerType(LAYER_TYPE_HARDWARE, mPaint);

        // Retrieve attributes from xml
        final TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ShadowLayout);

        try {
            setIsShadowed(typedArray.getBoolean(R.styleable.ShadowLayout_sl_shadowed, true));
            setShadowRadius(
                    typedArray.getDimension(
                            R.styleable.ShadowLayout_sl_shadow_radius, DEFAULT_SHADOW_RADIUS
                    )
            );
            setShadowDistance(
                    typedArray.getDimension(
                            R.styleable.ShadowLayout_sl_shadow_distance, DEFAULT_SHADOW_DISTANCE
                    )
            );
            setShadowAngle(
                    typedArray.getInteger(
                            R.styleable.ShadowLayout_sl_shadow_angle, (int) DEFAULT_SHADOW_ANGLE
                    )
            );
            setShadowColor(
                    typedArray.getColor(
                            R.styleable.ShadowLayout_sl_shadow_color, DEFAULT_SHADOW_COLOR
                    )
            );
        } finally {
            typedArray.recycle();
        }
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        // Clear shadow bitmap
        if (mBitmap != null) {
            mBitmap.recycle();
            mBitmap = null;
        }
    }

    public boolean isShadowed() {
        return mIsShadowed;
    }

    public void setIsShadowed(final boolean isShadowed) {
        mIsShadowed = isShadowed;
        postInvalidate();
    }

    public float getShadowDistance() {
        return mShadowDistance;
    }

    public void setShadowDistance(final float shadowDistance) {
        mShadowDistance = shadowDistance;
        resetShadow();
    }

    public float getShadowAngle() {
        return mShadowAngle;
    }

    @SuppressLint("SupportAnnotationUsage")
    @FloatRange
    public void setShadowAngle(@FloatRange(from = MIN_ANGLE, to = MAX_ANGLE) final float shadowAngle) {
        mShadowAngle = Math.max(MIN_ANGLE, Math.min(shadowAngle, MAX_ANGLE));
        resetShadow();
    }

    public float getShadowRadius() {
        return mShadowRadius;
    }

    public void setShadowRadius(final float shadowRadius) {
        mShadowRadius = Math.max(MIN_RADIUS, shadowRadius);

        if (isInEditMode()) return;
        // Set blur filter to paint
        mPaint.setMaskFilter(new BlurMaskFilter(mShadowRadius, BlurMaskFilter.Blur.NORMAL));
        resetShadow();
    }

    public int getShadowColor() {
        return mShadowColor;
    }

    public void setShadowColor(final int shadowColor) {
        mShadowColor = shadowColor;
        mShadowAlpha = Color.alpha(shadowColor);

        resetShadow();
    }

    public float getShadowDx() {
        return mShadowDx;
    }

    public float getShadowDy() {
        return mShadowDy;
    }

    // Reset shadow layer
    private void resetShadow() {
        // Detect shadow axis offset
        mShadowDx = (float) ((mShadowDistance) * Math.cos(mShadowAngle / 180.0F * Math.PI));
        mShadowDy = (float) ((mShadowDistance) * Math.sin(mShadowAngle / 180.0F * Math.PI));

        // Set padding for shadow bitmap
        final int padding = (int) (mShadowDistance + mShadowRadius);
        setPadding(padding, padding, padding, padding);
        requestLayout();
    }

    private int adjustShadowAlpha(final boolean adjust) {
        return Color.argb(
                adjust ? MAX_ALPHA : mShadowAlpha,
                Color.red(mShadowColor),
                Color.green(mShadowColor),
                Color.blue(mShadowColor)
        );
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        // Set ShadowLayout bounds
        mBounds.set(
                0, 0, MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec)
        );
    }

    @Override
    public void requestLayout() {
        // Redraw shadow
        mInvalidateShadow = true;
        super.requestLayout();
    }

    @Override
    protected void dispatchDraw(final Canvas canvas) {
        // If is not shadowed, skip
        if (mIsShadowed) {
            // If need to redraw shadow
            if (mInvalidateShadow) {
                // If bounds is zero
                if (mBounds.width() != 0 && mBounds.height() != 0) {
                    // Reset bitmap to bounds
                    mBitmap = Bitmap.createBitmap(
                            mBounds.width(), mBounds.height(), Bitmap.Config.ARGB_8888
                    );
                    // Canvas reset
                    mCanvas.setBitmap(mBitmap);

                    // We just redraw
                    mInvalidateShadow = false;
                    // Main feature of this lib. We create the local copy of all content, so now
                    // we can draw bitmap as a bottom layer of natural canvas.
                    // We draw shadow like blur effect on bitmap, cause of setShadowLayer() method of
                    // paint does`t draw shadow, it draw another copy of bitmap
                    super.dispatchDraw(mCanvas);

                    // Get the alpha bounds of bitmap
                    final Bitmap extractedAlpha = mBitmap.extractAlpha();
                    // Clear past content content to draw shadow
                    mCanvas.drawColor(0, PorterDuff.Mode.CLEAR);

                    // Draw extracted alpha bounds of our local canvas
                    mPaint.setColor(adjustShadowAlpha(false));
                    mCanvas.drawBitmap(extractedAlpha, mShadowDx, mShadowDy, mPaint);

                    // Recycle and clear extracted alpha
                    extractedAlpha.recycle();
                } else {
                    // Create placeholder bitmap when size is zero and wait until new size coming up
                    mBitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.RGB_565);
                }
            }

            // Reset alpha to draw child with full alpha
            mPaint.setColor(adjustShadowAlpha(true));
            // Draw shadow bitmap
            if (mCanvas != null && mBitmap != null && !mBitmap.isRecycled())
                canvas.drawBitmap(mBitmap, 0.0F, 0.0F, mPaint);
        }

        // Draw child`s
        super.dispatchDraw(canvas);
    }


}

다음과 같이 xml에서 Tag를 사용하십시오.

<yourpackagename.ShadowLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_gravity="center_horizontal"
        app:sl_shadow_color="#9e000000"
        app:sl_shadow_radius="4dp">
<child views>
</yourpackagename.ShadowLayout>

최신 정보

리소스 >> 값의 attrs.xml에 아래 코드를 넣으십시오.

  <declare-styleable name="ShadowLayout">
    <attr name="sl_shadowed" format="boolean"/>
    <attr name="sl_shadow_distance" format="dimension"/>
    <attr name="sl_shadow_angle" format="integer"/>
    <attr name="sl_shadow_radius" format="dimension"/>
    <attr name="sl_shadow_color" format="color"/>
</declare-styleable>

그것은 당신을 위해 작동 희망, 모든보기에 그림자를 제공 할 것입니다
Shashwat 굽타

@CoolMind R.styleable.ShadowLayout의 코드를 업데이트했습니다. 내 업데이트 된 답변을 확인하시기 바랍니다
Shashwat 굽타

업데이트 해 주셔서 감사합니다. API 19의 에뮬레이터에서 테스트를 시도했지만 <TextView>TextView를 중앙에 배치했지만 그림자를 추가하지 않았습니다.
CoolMind

효과가있다. sl_shadowed = "true"가 필요하다고 생각합니다. 반경은 패딩입니다. 즉, 그림자의 너비, 거리 및 각도가 dx, dy 오프셋을 만듭니다. 추가해야한다고 생각하는 것은 다음과 같습니다. // 그림자 비트 맵에 대한 패딩 설정 val padding = (shadowDistance + shadowRadius) .toInt () setPadding (if (shadowLeft) padding else 0, if (shadowTop) padding else 0, if (shadowRight )) 다른 영, 경우 (shadowBottom) 다른 패딩 0 패딩 그럼 당신은 조건부 레이아웃의 선호 가장자리에 그림자를 켤 수 있습니다
마이클 Ziobro

0

한 가지 가능한 해결책은 http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch 와 같은 9 개의 패치 이미지를 사용하는 것입니다.

또는

나는 이것을 다음과 같은 방식으로 수행했습니다. 이것은 round_corner.xml과 drop_shadow.xml이 배경 리소스로 사용되는 내 메인 레이아웃입니다. round_corner_two는 round_corner.xml과 동일하지만 색상 속성 만 다릅니다. round_corner.xml, drop_shadow.xml 및 round_conere_two.xml을 드로어 블 폴더에 복사하십시오.

<RelativeLayout
    android:id="@+id/facebook_id"
    android:layout_width="250dp"
    android:layout_height="52dp"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="28dp"
    android:background="@drawable/round_corner" >

    <LinearLayout
        android:id="@+id/shadow_id"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_margin="1dp"
        android:background="@drawable/drop_shadow" >

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:layout_marginBottom="2dp"
            android:background="@drawable/round_corner_two"
            android:gravity="center"
            android:text="@string/fb_butn_text"
            android:textColor="@color/white" >
        </TextView>
    </LinearLayout>
</RelativeLayout>

round_corner.xml :

<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">

<!-- view background color -->
<solid
    android:color="#ffffff" >
</solid>

<!-- view border color and width -->
<stroke
    android:width="0dp"
    android:color="#3b5998" >
</stroke>

<!-- If you want to add some padding -->
<padding
    android:left="1dp"
    android:top="1dp"
    android:right="1dp"
    android:bottom="1dp"    >
</padding>

<!-- Here is the corner radius -->
<corners
    android:radius="10dp"   >
</corners>

</shape>

drop_shadow.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item >
    <shape 
        android:shape="rectangle">
    <solid android:color="@android:color/darker_gray" />
    <corners android:radius="12dp"/>
    </shape>
</item>
<item android:right="1dp" android:left="1dp" android:bottom="5dp">
    <shape 
        android:shape="rectangle">
    <solid android:color="@android:color/white"/>
    <corners android:radius="5dp"/>
    </shape>
</item>
</layer-list>

0

너무 늦었다는 걸 알아요. 그러나 나는 동일한 요구 사항을 가졌습니다. 나는 이렇게 해결했다

<android.support.v7.widget.CardView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:cardUseCompatPadding="true"
app:cardElevation="4dp"
app:cardCornerRadius="3dp" >

<!-- put whatever you want -->

</android.support.v7.widget.CardView>

종속성을 추가해야합니다.

compile 'com.android.support:cardview-v7:25.0.1'

-1

이 xml drwable을 배경으로 설정하십시오 .---

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

<!-- Bottom 2dp Shadow -->
<item>
    <shape android:shape="rectangle" >
        <solid android:color="#d8d8d8" />-->Your shadow color<--

        <corners android:radius="15dp" />
    </shape>
</item>

<!-- White Top color -->
<item android:bottom="3px" android:left="3px" android:right="3px" android:top="3px">-->here you can customize the shadow size<---
    <shape android:shape="rectangle" >
        <solid android:color="#FFFFFF" />

        <corners android:radius="15dp" />
    </shape>
</item>

</layer-list>

이것은 레이아웃이 아닌 텍스트에 그림자를줍니다.
Abhinav Manchanda

3
아니요 그림자를 표시하지 않습니다. 작동 방식에 대한 자세한 답변을 제공해 주시겠습니까?
Yi H.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.