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.