Android - metin gölgesi?


184

Android'de metne gölge nasıl ekleyeceğimi merak ediyorum?

Bir bitmap uygulanan aşağıdaki kodu var ve gölgeli olmak istedim ...

paint.setColor(Color.BLACK);
paint.setTextSize(55);
paint.setFakeBoldText(false);
paint.setShadowLayer(1, 0, 0, Color.BLACK); //This only shadows my whole view...

2
Bir ShadowRadius'a sahip olmanız gerektiğini unutmayın.

2
@Fhucho solundaki cevabı doğru cevap olarak işaretlemelisiniz; Aynı şeyi yapmaya çalışıyordum ve bu gönderiyi ilk gördüğümde kaçırdım, çünkü hiçbir cevap doğru olarak işaretlenmedi. Gölgeyi programlı olarak eklemekle ilgili olmadığı için birçok kez yanıltılan cevap yanıltıcıdır.
— areyling

Yanıtlar:


390

Stili şu şekilde ekleyebilmeniz gerekir (Ringdroid için kaynak kodundan alınır):

  <style name="AudioFileInfoOverlayText">
    <item name="android:paddingLeft">4px</item>
    <item name="android:paddingBottom">4px</item>
    <item name="android:textColor">#ffffffff</item>
    <item name="android:textSize">12sp</item>
    <item name="android:shadowColor">#000000</item>
    <item name="android:shadowDx">1</item>
    <item name="android:shadowDy">1</item>
    <item name="android:shadowRadius">1</item>
  </style>

Ve düzeninizde, stili şu şekilde kullanın:

 <TextView android:id="@+id/info"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       style="@style/AudioFileInfoOverlayText"
       android:gravity="center" />

Düzenleme: kaynak kodu buradan görüntülenebilir: https://github.com/google/ringdroid

Edit2: Bu stili programlı olarak ayarlamak için, böyle bir şey yaparsınız ( bu örnekten ringdroid'in kaynaklarını yukarıdan eşleştirmek için değiştirildi )

TextView infoTextView = (TextView) findViewById(R.id.info);
infoTextView.setTextAppearance(getApplicationContext(),  
       R.style.AudioFileInfoOverlayText);

İçin imza setTextAppearanceDİR

public void setTextAppearance (Bağlam içeriği, int kalıntı)


Başlangıç : API Seviye 1 Belirtilen TextAppearance kaynağından metin rengini, boyutunu, stilini, ipucu rengini ve vurgu rengini ayarlar.


1
Ancak OP, özel widget'lar istiyor!
— HRJ

Bu olabilir, ancak bu yöntemi bir ImageView üzerinde kullanamayacağını öne sürecek hiçbir şey yoktur. Doğrudan resim yaptığını varsaydım çünkü aksi halde anlayamadı.
— Jim Schubert

harika ... standart yazı tipine çok fazla derinlik katar ve sağlam bir arka planda 10X daha iyi görünmesini sağlar.
— Matt K


2
Gerçekten yardım etti, kardeşim yaşasın
— Saad Bilal

72

Hem kodda hem de XML'de yapabilirsiniz. Sadece 4 temel şey ayarlanacak.

  1. gölge rengi
  2. Gölge Dx - gölgenin X ekseni ofsetini belirtir. - / + değerleri verebilirsiniz, burada -Dx metnin solunda bir gölge çizer ve sağda + Dx
  3. shadow Dy - gölgenin Y ekseni ofsetini belirtir. -Dy metnin üstünde bir gölge, + Dy metnin altında bir gölge belirtir.
  4. gölge yarıçapı - gölgenin kenarlarda ne kadar bulanıklaştırılacağını belirtir. Gölgenin belirgin olması gerekiyorsa küçük bir değer sağlayın. Aksi takdirde.

Örneğin

    android:shadowColor="@color/text_shadow_color"
    android:shadowDx="-2"
    android:shadowDy="2"
    android:shadowRadius="0.01"

Bu, metnin sol alt tarafına belirgin bir gölge çizer. Kodda, böyle bir şey ekleyebilirsiniz;

    TextView item = new TextView(getApplicationContext());
    item.setText(R.string.text);
    item.setTextColor(getResources().getColor(R.color.general_text_color));
    item.setShadowLayer(0.01f, -2, 2,   getResources().getColor(R.color.text_shadow_color));

7
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:padding="20dp" >

    <TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:shadowColor="#000"
        android:shadowDx="0"
        android:shadowDy="0"
        android:shadowRadius="50"
        android:text="Text Shadow Example1"
        android:textColor="#FBFBFB"
        android:textSize="28dp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textview2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Text Shadow Example2"
        android:textColor="#FBFBFB"
        android:textSize="28dp"
        android:textStyle="bold" />

</LinearLayout>

Yukarıdaki XML mizanpaj kodunda, textview1 mizanpajda Gölge efekti ile birlikte verilir. aşağıda yapılandırma öğeleri vardır

android: shadowDx - gölgenin X ekseni ofsetini belirtir. - / + değerleri verebilirsiniz, burada -Dx metnin soluna gölge ve sağa + Dx çizer

android: shadowDy - gölgenin Y ekseni ofsetini belirtir. -Dy metnin üstünde bir gölge, + Dy metnin altında bir gölge belirtir.

android: shadowRadius - gölgenin kenarlarda ne kadar bulanıklaştırılacağını belirtir. Gölgenin belirgin olması gerekiyorsa küçük bir değer sağlayın. android: shadowColor - gölge rengini belirler


Android TextView'de Gölge Efekti pragmatik olarak

İkinci TextView üzerindeki gölge efektini pragmatik olarak elde etmek için aşağıdaki kod snippet'ini kullanın.

TextView textv = (TextView) findViewById(R.id.textview2);
textv.setShadowLayer(30, 0, 0, Color.RED);        

Çıktı :

resim açıklamasını buraya girin


3

Android'in Başlatıcı'da yaptığı gibi bir gölge elde etmek istiyorsanız, bu değerleri yönetiyoruz. Arka plan olmadan Widget olarak görünecek TextView'ler oluşturmak istiyorsanız kullanışlıdır.

android:shadowColor="#94000000"
android:shadowDy="2"
android:shadowRadius="4"

2

2 metin çizin: bir gri (gölge olacak) ve üstünde ikinci metni çizin (y metnini gölge metinden 1 piksel daha fazla koordine edin).


1
Gönderileriniz için teşekkürler çocuklar. Bunu iki boya nesnesini kullanarak ve boya nesnesinden birinde setShadaowLayer kullanarak çözdüm.
— Grendizer

2
Alfa kullanırsanız bu iyi görünebilir, ancak hoş, yumuşak, deklaratif olarak ayarlanmış gölge gibi görünmez.
— ShibbyUK

2
 <style name="WhiteTextWithShadow" parent="@android:style/TextAppearance">
    <item name="android:shadowDx">1</item>
    <item name="android:shadowDy">1</item>
    <item name="android:shadowRadius">1</item>
    <item name="android:shadowColor">@android:color/black</item>
    <item name="android:textColor">@android:color/white</item>
</style>

sonra kullan

 <TextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="15sp"
            tools:text="Today, May 21"
            style="@style/WhiteTextWithShadow"/>
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.