बटन को छाया कैसे प्रदान करें


85

यहाँ छवि विवरण दर्ज करें

जैसा कि आप छवि में देख सकते हैं, मैं एक के पीछे छाया चाहता हूं Button। मैंने Buttonगोल कोनों के साथ बनाया है । लेकिन समस्या यह है कि मैं इसके पीछे एक छाया उत्पन्न नहीं कर सकता Button। इसे कैसे प्राप्त किया जा सकता है?


जवाबों:


132

अपने इच्छित रूप को प्राप्त करने के लिए इस दृष्टिकोण का उपयोग करें।
button_selector.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <layer-list>
        <item android:right="5dp" android:top="5dp">
            <shape>
                <corners android:radius="3dp" />
                <solid android:color="#D6D6D6" />
            </shape>
        </item>
        <item android:bottom="2dp" android:left="2dp">
            <shape>
                <gradient android:angle="270" 
                    android:endColor="#E2E2E2" android:startColor="#BABABA" />
                <stroke android:width="1dp" android:color="#BABABA" />
                <corners android:radius="4dp" />
                <padding android:bottom="10dp" android:left="10dp" 
                    android:right="10dp" android:top="10dp" />
            </shape>
        </item>
    </layer-list>
</item>

</selector>

और अपने xml लेआउट में:

<Button
   android:background="@drawable/button_selector"
   ...
   ..
/>

यह अच्छा लग रहा है, लेकिन जब मैंने कोशिश की यह intellij पसंद नहीं आया। जब मैं को देखा डॉक के लिए itemयह कहते android:drawableहै की आवश्यकता
जॉनीलांबाडा

1
समापन </ चयनकर्ता> टैग गायब है
myforums

5
यह बिल्कुल वैसा नहीं है जैसा कि पूछने वाला चाहता था क्योंकि यह समाधान विपरीत बनाता है: ढाल बटन पृष्ठभूमि और ठोस छाया रंग। और यह बाहरी छाया से बहुत अलग लगता है

1
क्या मैं इसे बना सकता हूं ताकि एक textColor चयनकर्ता ऊपर के चयनकर्ता में बेक हो जाए -इसलिए मुझे दोनों पृष्ठभूमि textColor सेट करने की आवश्यकता नहीं है जब भी मैं एक बटन को परिभाषित करता हूं, लेकिन केवल पृष्ठभूमि सेट करने की आवश्यकता होती है ...?
जॉनीटेक्स

<selector>और <item>जरूरत नहीं है। छवि को वापस कर दिया गया है, जैसा कि @ user4702646 ने कहा।
CoolMind

54

Android संस्करण 5.0 और ऊपर के लिए

अन्य विचारों के लिए उन्नयन का प्रयास करें ..

android:elevation="10dp"

बटन के लिए,

android:stateListAnimator="@anim/button_state_list_animator"

button_state_list_animator.xml - https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/res/anim/button_state_list_anim_material=xml

5.0 संस्करण से नीचे,

सभी विचारों के लिए,

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

मेरा आउटपुट:

यहाँ छवि विवरण दर्ज करें


मैं इस दृष्टिकोण का उपयोग करना चाहता हूं, लेकिन मेरे बटन एक ग्रिड नियंत्रण में गतिशील रूप से (अर्थात कोड में) बनाए जाते हैं, घोषित रूप से नहीं (वास्तव में, मैं ज़ैमरीन मुक्त संस्करण का उपयोग कर रहा हूं, इसलिए मोनो लिबास)। किसी भी विशेषता को सेट करने के लिए एक सीधी विधि प्रतीत नहीं होती है।
jrichview

@jrichview इस उत्तर को देखें और साथ ही stackoverflow.com/a/24459128/3879847 पर
Ranjith Kumar

अरे, मैं इसे कैसे इस्तेमाल कर सकता हूं, अगर मैं अपने बटन का आकार ड्रॉबल के साथ सेट करूं?
Egor यादृच्छिक करें

19

यहाँ फ़ोल्डर के cw_button_shadow.xml अंदर छाया के साथ मेरा बटन हैdrawable

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false">
        <layer-list>
            <!-- SHADOW -->
            <item>
                <shape>
                    <solid android:color="@color/red_400"/>
                    <!-- alttan gölge -->
                    <corners android:radius="19dp"/>
                </shape>
            </item>
            <!-- BUTTON alttan gölge
              android:right="5px" to make it round-->
            <item
                android:bottom="5px"
                >
                <shape>
                    <padding android:bottom="5dp"/>
                    <gradient
                        android:startColor="#1c4985"
                        android:endColor="#163969"
                        android:angle="270" />
                    <corners
                        android:radius="19dp"/>
                    <padding
                        android:left="10dp"
                        android:top="10dp"
                        android:right="5dp"
                        android:bottom="10dp"/>
                </shape>
            </item>
        </layer-list>
    </item>

    <item android:state_pressed="true">
        <layer-list>
            <!-- SHADOW -->
            <item>
                <shape>
                    <solid android:color="#102746"/>
                    <corners android:radius="19dp"/>

                </shape>
            </item>
            <!-- BUTTON -->
            <item android:bottom="5px">
                <shape>
                    <padding android:bottom="5dp"/>
                    <gradient
                        android:startColor="#1c4985"
                        android:endColor="#163969"
                        android:angle="270" />
                    <corners
                        android:radius="19dp"/>
                    <padding
                        android:left="10dp"
                        android:top="10dp"
                        android:right="5dp"
                        android:bottom="10dp"/>
                </shape>
            </item>
        </layer-list>
    </item>
</selector>

कैसे इस्तेमाल करे। बटन xml में, आप अपनी ऊंचाई और वजन का आकार बदल सकते हैं

<Button
                android:text="+ add friends"
                android:layout_width="120dp"
                android:layout_height="40dp"
               android:background="@drawable/cw_button_shadow" />

यहाँ छवि विवरण दर्ज करें


13

यदि आप पूर्व-लॉलीपॉप उपकरणों को लक्षित कर रहे हैं, तो आप शैडो-लेआउट का उपयोग कर सकते हैं , क्योंकि यह आसान है और आप इसे विभिन्न प्रकार के लेआउट में उपयोग कर सकते हैं।


अपनी ग्रेड फ़ाइल में छाया-लेआउट जोड़ें :

dependencies {
    compile 'com.github.dmytrodanylyk.shadow-layout:library:1.0.1'
}


शीर्ष पर xml लेआउट है जहाँ आपके पास अपना बटन है, शीर्ष पर जोड़ें :

xmlns:app="http://schemas.android.com/apk/res-auto"

यह कस्टम विशेषताएँ उपलब्ध कराएगा।


तब आप अपने चारों ओर एक छाया लेआउट डालते हैं बटन :

<com.dd.ShadowLayout
        android:layout_marginTop="16dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:sl_shadowRadius="4dp"
        app:sl_shadowColor="#AA000000"
        app:sl_dx="0dp"
        app:sl_dy="0dp"
        app:sl_cornerRadius="56dp"> 

       <YourButton
          .... />

</com.dd.ShadowLayout>

फिर आप app:अपनी आवश्यक छाया से मिलान करने के लिए सेटिंग्स को ट्विक कर सकते हैं ।

आशा करता हूँ की ये काम करेगा।


गरीब, पदावनत के साथ, कोई और अधिक समर्थित। इसके अलावा, ऐसा लगता है कि यह केवल अंधेरे / काले छाया के लिए अनुमति देता है, न कि प्रकाश वाले।
फोर्बर्ग

10

मैंने ऊपर से कोड की कोशिश की है और अपनी खुद की छाया बनाई है जो मैं हासिल करने की कोशिश कर रहा हूं, उससे थोड़ा कम है। शायद इससे दूसरों को भी मदद मिलेगी।

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <layer-list>
            <item android:left="5dp" android:top="5dp">
                <shape>
                    <corners android:radius="3dp" />
                    <gradient
                        android:angle="315"
                        android:endColor="@android:color/transparent"
                        android:startColor="@android:color/black"
                        android:type="radial"
                        android:centerX="0.55"
                        android:centerY="0"
                        android:gradientRadius="300"/>
                    <padding android:bottom="1dp" android:left="0dp" android:right="3dp" android:top="0dp" />
                </shape>
            </item>
            <item android:bottom="2dp" android:left="3dp">
                <shape>
                    <corners android:radius="1dp" />
                    <solid android:color="@color/colorPrimary" />


                </shape>
            </item>
        </layer-list>
    </item>

</selector>

1
कृपया, एक स्क्रीनशॉट संलग्न करें।
CoolMind

3

अगर यह आपके लिए काम करता है तो इसे आज़माएं

यहाँ छवि विवरण दर्ज करें

android:background="@drawable/drop_shadow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="3dp"
        android:paddingTop="3dp"
        android:paddingRight="4dp"
        android:paddingBottom="5dp"

1

छाया के साथ नमूना 9 पैच छवि

बहुत शोध के बाद मुझे एक आसान तरीका मिला।

एक 9 पैच छवि बनाएं और इसे बटन या किसी अन्य दृश्य की पृष्ठभूमि के रूप में लागू करें।

आप इस वेबसाइट का उपयोग करके छाया के साथ एक 9 पैच छवि बना सकते हैं ।

अपनी खींचने योग्य निर्देशिका में 9 पैच छवि रखो और इसे बटन के लिए पृष्ठभूमि के रूप में लागू करें।

mButton.setBackground(ContextCompat.getDrawable(mContext, R.drawable.your_9_patch_image);

0

आप यह कोशिश कर सकते हैं:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<layer-list>
        <item android:left="1dp" android:top="3dp">
            <shape>
                <solid android:color="#a5040d" />
                <corners android:radius="3dip"/>
            </shape>
        </item>
    </layer-list>
  </item>
<item>
    <layer-list>
        <item android:left="0dp" android:top="0dp">
            <shape>
                    <solid android:color="#99080d" />
                <corners android:radius="3dip"/>
            </shape>
        </item>
        <item android:bottom="3dp" android:right="2dp">
            <shape>
                <solid android:color="#a5040d" />
                <corners android:radius="3dip"/>
            </shape>
        </item>
    </layer-list>
</item>


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.