Düğmeye gölge nasıl sağlanır


Yanıtlar:


134

İstediğiniz görünümü elde etmek için bu yaklaşımı kullanın.
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>

Ve xml düzeninizde:

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

Bu harika görünüyor, ama bu bilgiyi denediğimde hoşuma gitmedi. Ben baktığımda doc için itemifadesinin bulunduğundan android:drawableedilir gerekli .
JohnnyLambada

1
kapanış </selector> etiketi eksik
myforums

6
Bu çözüm tam tersini yaptığı için soruyu soranın istediği tam olarak bu değil: gradyan düğmesi arka planı ve düz gölge rengi. Ve bu dış gölgeden çok farklı görünüyor

1
Bir textColor seçicisinin yukarıdaki seçiciye yerleştirilmesi için yapabilir miyim - bu nedenle, bir düğmeyi her tanımladığımda her iki arka plan textColor'u da ayarlamam gerekmez, ancak yalnızca arka planı ayarlamam gerekir ...?
JohnyTex

<selector>ve <item>gerekli değildir. @ User4702646 dediği gibi görüntü geri döndürülür.
CoolMind

57

Android 5.0 ve üzeri sürümler için

Diğer görünümler için Yüksekliği deneyin ..

android:elevation="10dp"

Düğmeler için,

android:stateListAnimator="@anim/button_state_list_animator"

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

5.0 sürümünün altında,

Tüm görünümler için,

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

Çıktım:

görüntü açıklamasını buraya girin


Bu yaklaşımı kullanmak isterdim, ancak düğmelerim bildirimsel olarak değil (aslında Xamarin ücretsiz sürümünü kullanıyorum, yani Mono lib) bir ızgara kontrolünde dinamik olarak (yani kodda) oluşturulur. Herhangi bir özelliği ayarlamak için basit bir yöntem gibi görünmüyor.
jrichview

@jrichview bu yanıtı gör ve ayrıca yorum yap stackoverflow.com/a/24459128/3879847
Ranjith Kumar

Hey, düğmemin şeklini çekmeceli olarak ayarlarsam, bunu nasıl çekilebilir olarak kullanabilirim?
Egor Randomize

21

İşte klasörün cw_button_shadow.xml içinde gölgeli düğmemdrawable

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

Nasıl kullanılır. Button xml'de boyunuzu ve kilonuzu yeniden boyutlandırabilirsiniz

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

görüntü açıklamasını buraya girin


13

Lollipop öncesi cihazları hedefliyorsanız, Shadow-Layout'u kullanabilirsiniz , çünkü kolay ve farklı türden düzenlerde kullanabilirsiniz.


Gradle dosyanıza gölge düzeni ekleyin :

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


Düğmenizin bulunduğu xml düzeninin en üstünde, en üste ekleyin :

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

özel öznitelikleri kullanıma sunacaktır.


Sonra etrafına bir gölge düzeni koyarsın Button :

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

Ardından app:, gerekli gölgenize uyacak şekilde ayarları değiştirebilirsiniz.

Umarım yardımcı olur.


Kullanımdan kaldırılan zayıf kitaplık, ayrıca artık desteklenmiyor. Üstelik açık olanlara değil, sadece koyu / siyah gölgelere izin veriyor gibi görünüyor.
forsberg

10

Kodu yukarıdan denedim ve elde etmeye çalıştığım şeye biraz daha yakın olan kendi gölgemi yaptım. Belki başkalarına da yardımcı olur.

<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
Lütfen bir ekran görüntüsü ekleyin.
CoolMind

3

Bu sizin için çalışıyorsa bunu deneyin

görüntü açıklamasını buraya girin

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

Gölgeli örnek 9 yama görüntüsü

Bir sürü araştırmadan sonra kolay bir yöntem buldum.

9 yama görüntüsü oluşturun ve bunu düğme veya başka bir görünümün arka planı olarak uygulayın.

Bu web sitesini kullanarak gölgeli 9 yama görüntüsü oluşturabilirsiniz .

9 yama görüntüsünü çekilebilir dizininize yerleştirin ve düğmenin arka planı olarak uygulayın.

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

0

Bunu deneyebilirsiniz:

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



0

Android artık sizin için aynı şeyi yapan ExtendedFloatingActionButton'ı sağlıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.