14

I would like to make an inner shadow on a textview, But I can't find any example of that on the web.

Is there any way to do that on Android?

I know these attributes:

android:shadowColor
android:shadowRadius
android:shadowDx
android:shadowDy

Am I missing something useful?

animuson
  • 53,861
  • 28
  • 137
  • 147
Romain Piel
  • 11,017
  • 15
  • 71
  • 106
  • I just tried to set negative values to android:shadowDy android:shadowDx and android:shadowRadius but that doesn't solve anything. Any idea? – Romain Piel Jul 29 '11 at 09:51

2 Answers2

21

If you're looking for inner shadows like these:

enter image description here

You could try MagicTextView

    <com.qwerjk.better_text.MagicTextView
        xmlns:qwerjk="http://schemas.android.com/apk/res/com.qwerjk.better_text"
        android:textSize="42dp"
        android:textColor="#FFffff00"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textStyle="bold"
        android:padding="10dp"
        qwerjk:innerShadowDy="3"
        qwerjk:innerShadowColor="#FF000000"
        qwerjk:innerShadowRadius="5"
        android:text="InnerShadow" />

Note: I made this, and am posting more for the sake of future travelers than the OP. It's borderline spam, but being on-topic, perhaps acceptable?

ABentSpoon
  • 5,007
  • 1
  • 26
  • 23
  • Nice breakthrough, which is still a problem in android. (inner shadow) is this only for text's or can be set for any views? – Wesley Jul 04 '12 at 10:23
  • I hadn't thought of making this work for other views. Usually, I just drop a View with a GradientDrawable background into a FrameLayout over the view I want shaded. Would be nice to only need to add an xml property though. – ABentSpoon Jul 04 '12 at 20:44
  • It works fine on ICS and prev versions, but on Jelly Bean it doesn't work. – Sergei Vasilenko Jun 26 '13 at 07:27
12

If you want the TextView to have inner shadow like this:

enter image description here

you have to use 9-patch drawable like this one:

enter image description here

Set the 9-patch drawable as the TextView's background.

The attributes you mention: android:shadowColor, android:shadowRadius, android:shadowDx, android:shadowDy serve other purpose, they create text shadow:

enter image description here

Tomik
  • 23,857
  • 8
  • 121
  • 100
  • I downloaded and tested the image but it shows ugly. How to remove black lines? How do i modify to get engraved style textview? Thanks. – user1090751 Mar 02 '20 at 16:34
  • If you mean the image in the post. It's a 9-patch png. The black lines serve purpose. It will not work without them. Read the docs https://developer.android.com/guide/topics/graphics/drawables#nine-patch I don't think this will serve well for an engraved style text. I guess a special font, image or special view will be necessary for that. – Tomik Mar 03 '20 at 08:23