2010-03-21 19 views
155

Me pregunto cómo agregar sombra en el texto en Android?Android - ¿sombra en el texto?

Tengo el siguiente código que se aplica sobre un mapa de bits y quería ser la sombra ...

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

agradecido por cualquier consejo!

+2

usted debe marcar la respuesta @fhucho la izquierda como la respuesta correcta; Intenté hacer lo mismo y lo perdí la primera vez que vi esta publicación, ya que ninguna respuesta se marcó como correcta. La respuesta muchas veces votada es engañosa, ya que no se relaciona con la adición de la sombra mediante programación. – areyling

+2

Tenga en cuenta que debe tener un ShadowRadius. –

+0

Posible duplicado de [Agregar opaco "sombra" (contorno) a Android TextView] (http://stackoverflow.com/questions/39106454/add-opaque-shadow-outline-to-android-textview) –

Respuesta

342

Usted debe ser capaz de añadir el estilo, como esto (tomado de código fuente para 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> 

Y en su diseño, utilice el estilo de esta manera:

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

Editar : el código fuente se puede ver aquí: https://github.com/google/ringdroid

Edit2: para definir este estilo mediante programación, que haría algo como esto (modificado a partir this example para que coincida con los recursos de Ringdroid desde arriba)

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

La firma para setTextAppearance es

pública setTextAppearance vacío (contexto Contexto, int resid)

desde: Nivel API 1
establece el texto color, tamaño, estilo, color de sugerencia y resaltan el color del recurso TextAppearance especificado.

+1

¡Pero el OP está pidiendo widgets personalizados! – HRJ

+0

Eso puede ser, pero no hay nada que sugiera que no podría usar este método en un ImageView. Supuse que estaba pintando directamente porque no podía resolverlo de otra manera. –

+3

¿Cómo podemos aplicar el estilo "style =" @/AudioFileInfoOverlayText "" a través del código ???? – Farhan

1

Dibuja 2 textos: uno gris (será la sombra) y encima dibuja el segundo texto (coordenada y y 1px más que el texto sombreado).

+1

Gracias a todos por sus publicaciones . Lo resolví usando dos objetos de pintura y usando setShadaowLayer en uno de los objetos de pintura. – Grendizer

+2

Esto podría verse bien si usa alfa, pero no se verá como la sombra agradable, suave y configurativamente establecida. – ShibbyUK

60

Puede hacer tanto en código como en XML. Solo 4 cosas básicas para establecer.

  1. color de la sombra
  2. Sombra Dx - se especifica el desplazamiento de la sombra eje X. Puede dar -/+ valores, donde -Dx dibuja una sombra a la izquierda del texto y + Dx a la derecha
  3. shadow Dy - especifica el desplazamiento del eje Y de la sombra. -Dy especifica una sombra sobre el texto y + Dy especifica debajo del texto.
  4. radio de sombra: especifica cuánto debe difuminarse la sombra en los bordes. Proporcione un valor pequeño si la sombra necesita ser prominente. De lo contrario de lo contrario.

e.g.

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

Esto dibuja una sombra prominente en el lado inferior izquierdo del texto. En el código, puede agregar algo como esto;

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)); 
2

Si quiere lograr una sombra como la que hace Android en el Iniciador, estamos gestionando estos valores. Son útiles si desea crear TextViews que aparecerán como un widget, sin fondo.

android:shadowColor="#94000000" 
android:shadowDy="2" 
android:shadowRadius="4" 
0
<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> 

a continuación, utilizar como

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