TextView:shadowDx / Dy /半径在浸?

我们如何在dip中指定一个TextView的shadowDx / Dy / Radius值? 现在我有:

<style name="foo"> <item name="android:shadowDx">-1</item> <item name="android:shadowDy">-1</item> <item name="android:shadowRadius">1</item> </style> 

我似乎无法在这些地方指定“1dip”。 有没有办法做到这一点,而不是在代码中设置它们,并且自己进行设备密度倍增?

谢谢

Solutions Collecting From Web of "TextView:shadowDx / Dy /半径在浸?"

不幸的是,这是唯一的方法,对不起

我用自定义的xml属性创build了覆盖的TextView,以便于处理。

 public class TextViewShadowDips extends TextView { public TextViewShadowDips(Context context, AttributeSet attrs) { super(context, attrs); final TypedArray attributes = context.obtainStyledAttributes(attrs, R.styleable.TextViewShadowDips); final float shadowRadius = attributes.getDimension(R.styleable.TextViewShadowDips_shadowRadius, 0f); final float shadowDx = attributes.getDimension(R.styleable.TextViewShadowDips_shadowDx, 0f); final float shadowDy = attributes.getDimension(R.styleable.TextViewShadowDips_shadowDy, 0f); final int shadowColor = attributes.getColor(R.styleable.TextViewShadowDips_shadowColor, 0); if (shadowColor != 0) { setShadowLayer(shadowRadius, shadowDx, shadowDy, shadowColor); } else { getPaint().clearShadowLayer(); } attributes.recycle(); } } 

attrs.xml里面的“values”资源文件夹

 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="TextViewShadowDips"> <attr name="shadowRadius" format="dimension"/> <attr name="shadowDx" format="dimension"/> <attr name="shadowDy" format="dimension"/> <attr name="shadowColor" format="color"/> </declare-styleable> </resources> 

用法示例:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="wrap_content" android:layout_height="wrap_content" > <my.package.name.TextViewShadowDips android:layout_width="wrap_content" android:layout_height="wrap_content" app:shadowColor="#000000" app:shadowRadius="2dip" app:shadowDx="2dip" app:shadowDy="2dip" /> </RelativeLayout> 

正如Romain所说,您不能直接在XML中设置dip值。 尽pipe如此,您仍然可以在XML中执行此操作,而无需在代码中进行杂乱的缩放计算。

诀窍是除了values-ldpi文件夹之外,还要有单独的values-hdpi values-ldpivalues-mdpivalues-ldpi文件夹。 在每个内部,创build一个单独的styles.xml其中包含应用了阴影的文本样式。

例如,你可能在values-mdpi/styles.xml有这个:

 <style name="my_shadow"> <item name="android:shadowDx">0.0</item> <item name="android:shadowDy">-1.0</item> <item name="android:shadowRadius">1.0</item> </style> 

values-hdpi/styles.xml ,您可以使用相同的样式,但是对于更高的密度来说,

 <style name="my_shadow"> <item name="android:shadowDx">0.0</item> <item name="android:shadowDy">-1.5</item> <item name="android:shadowRadius">1.5</item> </style>