एंड्रॉइड में रैखिक रेखा के चारों ओर छाया कैसे दिखाएं?


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. ग्रे रंग के साथ एक सादा लिनियर लयआउट जोड़ें, जिसके ऊपर अपना वास्तविक लेआउट जोड़ें, नीचे और दाईं ओर 1 या 2 डीपी के बराबर।

  2. एक छाया के साथ 9-पैच छवि रखें और इसे अपने रैखिक लेआउट की पृष्ठभूमि के रूप में सेट करें


9-पैच ऐसा करने का सबसे अच्छा तरीका है!
एंड्रानिक

क्या कस्टम पॉलीगॉन के साथ 9 पैच का उपयोग करने का एक तरीका है? मैंने इस टूल को inloop.github.io/shadow4android पर आज़माया, लेकिन यह सिर्फ अंडाकार / आयताकार आकृतियों के लिए छाया बनाता है
रीम

144

परत-सूची को लागू करने से समस्या का एक और समाधान भी है जो कि लिनियरलैटआउट के लिए पृष्ठभूमि के रूप में कार्य करेगा।

बैकग्राउंड_विथ_शेडो res/drawable। 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="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 के साथ समान कोड का प्रयास करें। मुझे पता है, यह ज्यादातर मामलों में अदृश्य है, लेकिन अगर कोई मुझे एक समाधान दे सकता है, तो यह सही होगा!
पोटर्रोर 15

1
@Poutrathor, दिलचस्प है कि आपने उस मुद्दे पर गौर किया। दुर्भाग्य से मेरे पास फिलहाल कोई और उपाय नहीं है। यह क्या है जिसे आप पूरा करने की कोशिश कर रहे हैं? हो सकता है कि कोई आपकी समस्या के बारे में आपकी मदद कर सकता है।
मुलेठी

"ऐसा क्या है जिसे आप पूरा करने की कोशिश कर रहे हैं?" पूर्णता, बिल्कुल! केवल मजाक कर रहा हूं, मैं इसे नोटिस करता हूं, इसलिए मैं इसकी रिपोर्ट करता हूं। आपका समाधान वास्तव में ट्रेंडी बहुत छोटी छाया के लिए अच्छा है और मैं इसे खुशी से उपयोग कर रहा हूं। काश मैं यू को और अधिक
उभार

3
जोड़ने के लिए, ऊपरी आकार छाया (!) है, जबकि निचला आकार मुख्य बड़ा हिस्सा है।
सैंडलोन

30

खैर, यह हासिल करना आसान है।

बस एक निर्माण करें जो GradientDrawableकाले रंग से आता है और एक पारदर्शी रंग के लिए जाता है, अपने आकार को उस दृश्य के करीब रखने के लिए जो आप चाहते हैं कि आप एक छाया चाहते हैं, का उपयोग करें, तो आपको बस ऊँचाई या चौड़ाई के लिए कोई मान देना होगा।

यहाँ एक उदाहरण दिया गया है, इस फ़ाइल को अंदर बनाना है 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>

एक से ऊपर निम्नलिखित कोड जगह LinearLayout, उदाहरण के लिए, सेट android:layout_widthऔर android:layout_heightकरने के लिए fill_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 के अंदर रख रहे हैं, तो विशेषता का उपयोग करें , अन्यथा इसे अनदेखा करें।

आशा है कि यह किसी की मदद करेगा।


हैलो ... मुझे पता है कि यह पुराना है ... लेकिन क्या आप कह रहे हैं कि आयताकार दृश्य संरचना के चारों ओर छाया प्रभाव प्राप्त करने का एकमात्र तरीका एक और आयताकार संरचना बनाना है, और फिर तदनुसार उन्हें पंक्तिबद्ध करना है ??? ... धन्यवाद ... मैं Android में नया हूँ ...
dsdsdsdsd

नमस्ते @dsdsdsds मुझे यकीन नहीं है कि यह एकमात्र छाया है जिसे छाया प्रभाव प्राप्त करने के लिए है क्योंकि सामग्री डिजाइन ने बहुत सारे डिजाइन संसाधनों को पेश किया है, मैं घर पहुंचने पर एक नज़र डालूंगा और अगर मुझे कुछ भी मिला तो मैं यहां टिप्पणी करूंगा।
मुरीलो फेरेरा

18

लॉलीपॉप और उससे ऊपर के लिए आप ऊंचाई का उपयोग कर सकते हैं ।

पुराने संस्करणों के लिए:

यहाँ से एक आलसी हैक है: http://odedhb.blogspot.com/2013/05/android-layout-shadow-without-9-patch.html

(किस्त_फ्रेम किटकैट पर काम नहीं करता है, छाया को विस्फोट से हटा दिया गया था)

महज प्रयोग करें:

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"
        />

और अलग बीजी रंग के साथ:

<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"सफेद के लिए भी
अब्बासालिम

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"

यह कोड की कुछ पंक्तियाँ नहीं है, लेकिन आपका कोड सभी डिवाइसों में काम करना चाहिए। आपके द्वारा सुझाई गई ऊँचाई केवल एपीआई 21 और उससे ऊपर
मूसऑफ

6

असल में मैं @odedbreiner से सहमत हूं लेकिन मैंने डायलॉग_फ्रेम को पहली परत के अंदर रखा और काले रंग की पृष्ठभूमि को सफेद परत के नीचे छिपा दिया।

    <?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. अपने में डूबो 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 में टैग का उपयोग करें:

<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>

यह किसी भी दृश्य को छाया प्रदान करेगा, आशा है कि यह आपके लिए काम करेगा
शाश्वत गुप्त

@CoolMind i ने R.styleable.ShadowLayout के लिए कोड अपडेट किया है। कृपया मेरे अद्यतन उत्तर की जाँच करें
शाश्वत गुप्ता

अपडेट के लिए धन्यवाद। मैंने इसे एपीआई 19 के एमुलेटर पर परीक्षण करने की कोशिश की <TextView>, यह टेक्स्ट व्यू केंद्रित था, लेकिन इसमें छाया नहीं थी।
CoolMind

यह काम करता हैं। मुझे लगता है कि sl_shadowed = "सत्य" की आवश्यकता है, त्रिज्या पैडिंग है अर्थात छाया की दूरी, दूरी और कोण dx, डाई ऑफसेट बनाता है। मुझे लगता है कि जोड़ा जाना चाहिए कुछ इस तरह है // छाया बिटमैप वैल पैडिंग के लिए सेट पैडिंग = (शैडोडिस्टेंस + शैडोएडियस) .toInt () सेटपैडिंग (यदि (शैडोलेफ्ट)) पैडिंग बाकी 0, अगर (शैडोटॉप) पैडिंग अन्य 0, अगर (शैडाइट राइटिंग) ) अन्य को पेडिंग करना, अगर (शैडोबॉटम) को और 0 को पेडिंग करना) तो आप सशर्त रूप से लेआउट के पसंदीदा किनारों पर छाया को चालू कर सकते हैं
माइकेल जिब्रो

0

एक संभव समाधान नौ पैच छवि का उपयोग कर रहा है जैसे http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch

या

मैंने इसे निम्नलिखित तरीके से किया है। यह मेरा मुख्य लेआउट है जिसमें बैकग्राउंड रिसोर्स के रूप में round_corner.xml और drop_shadow.xml का उपयोग किया जाता है। राउंड_कॉन्सर_ट्वो राउंड_कोर्नर की तरह ही है। एक्सएमएल केवल रंग विशेषता अलग है। राउंड_कोर्नर.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>

राउंड_कोर्नर। 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>

यह पाठ को छाया देता है, न कि लेआउट को।
अभिनव मनचंदा 19

3
नहीं यह छाया नहीं दिखाएगा। क्या आप इस बारे में अधिक विस्तृत जवाब दे सकते हैं कि यह कैसे काम करता है?
यी एच।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.