Android-文字阴影?


184

我想知道如何在android中的文本上添加阴影?

我将以下代码应用于位图,并且希望对其进行阴影处理...

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

2
请记住,您必须具有ShadowRadius。

2
您应该将答案@fhucho标记为正确答案;我试图做同样的事情,但是第一次看到这篇文章时就错过了,因为没有答案被标记为正确。多次提出的答案具有误导性,因为它与以编程方式添加阴影无关。
2011年

Answers:


390

您应该能够添加样式,如下所示(摘自Ringdroid的源代码):

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

在您的布局中,使用如下样式:

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

编辑:源代码可以在这里查看: https //github.com/google/ringdroid

Edit2:要以编程方式设置此样式,您需要执行以下操作(从此示例进行修改,以匹配上方ringdroid的资源)

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

的签名setTextAppearance

public void setTextAppearance(上下文上下文,int resid)

从以下版本开始:API级别1
设置指定TextAppearance资源中的文本颜色,大小,样式,提示颜色和突出显示颜色。


1
但是OP要求自定义小部件!
HRJ

可能是这样,但是没有任何迹象表明他不能在ImageView上使用此方法。我以为他是直接画画,因为否则他无法弄清楚。
Jim Schubert

很棒...为标准字体增加了非常需要的深度,并使其在纯色背景下看起来好10倍。
Matt K

@法汉(Farhan),请看这里:stackoverflow.com/questions/4630440/…–
吉姆·舒伯特

2
非常有帮助,竖起大拇指
Saad Bilal

72

您可以同时使用代码和XML。仅需设置4个基本条件。

  1. 阴影颜色
  2. 阴影Dx-指定阴影的X轴偏移。您可以给-/ +值,其中-Dx在文本左侧绘制阴影,在+ D​​x右侧绘制阴影
  3. shadow Dy-指定阴影的Y轴偏移量。-Dy指定文本上方的阴影,+ Dy指定文本下方的阴影。
  4. 阴影半径-指定应在边缘模糊多少阴影。如果阴影需要突出,则提供较小的值。否则。

例如

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

这在文本的左下方绘制了一个突出的阴影。在代码中,您可以添加如下内容:

    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>

在上面的XML布局代码中,textview1在布局中具有阴影效果。以下是配置项

android:shadowDx –指定阴影的X轴偏移。您可以给-/ +值,其中-Dx在文本左侧绘制阴影,在+ D​​x右侧绘制阴影

android:shadowDy –它指定阴影的Y轴偏移。-Dy指定文本上方的阴影,+ Dy指定文本下方的阴影。

android:shadowRadius –指定应在边缘模糊多少阴影。如果阴影需要突出,则提供较小的值。android:shadowColor –指定阴影颜色


实用地在Android TextView上产生阴影效果

使用下面的代码片段以实用的方式在第二个TextView上获得阴影效果。

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

输出:

在此处输入图片说明


3

如果您想获得类似于Android在启动器中所做的阴影,我们将管理这些值。如果您要创建将以小部件形式显示且没有背景的TextView,则它们很有用。

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

2

绘制2个文本:一个灰色(将是阴影),并在其顶部绘制第二个文本(y坐标比阴影文本多1px)。


1
谢谢你们的帖子。我确实通过使用两个绘制对象并在一个绘制对象上使用setShadaowLayer来解决了该问题。
Grendizer 2010年

2
如果您使用Alpha,这可能看起来不错,但看起来不会像漂亮的,柔和的,声明性设置的阴影。
ShibbyUK'9

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>

然后用作

 <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"/>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.