Android text视图:阴影dx/Dy/倾斜半径?
如何在dip中指定TextView的shadowDx/Dy/Radius值?现在我有:Android text视图:阴影dx/Dy/倾斜半径?,android,Android,如何在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>
<style name="foo">
<item name="android:shadowDx">-1</item>
<item name="android:shadowDy">-1</item>
<item name="android:shadowRadius">1</item>
</style>
-1
-1
1.
我似乎无法在这些地方指定“1dip”。除了在代码中设置它们和自己进行设备密度乘法之外,还有其他方法吗
谢谢不幸的是,这是唯一的方法,抱歉:(正如Romain所说,您不能直接在XML中设置dip值。不过,您仍然可以在XML中进行设置,而不必在代码中进行混乱的缩放计算 诀窍是除了正常的
值
文件夹外,还要有单独的值hdpi
、值mdpi
和值ldpi
文件夹。在每个文件夹中,创建一个单独的样式.xml
,其中包含应用阴影的文本样式
例如,在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>
我制作了一个带有自定义xml属性的重写TextView,以方便地处理这个问题
也可以作为库提供:
“values”资源文件夹中的attrs.xml
<?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="2dp"
app:shadowDx="2dp"
app:shadowDy="2dp"
/>
</RelativeLayout>
阴影参数的单位是什么?是px、pt、dp、sp…?这会被改变吗?有点烦人!还有,为什么半径0.1会被转换为0,因此不会显示任何阴影?这里提出的错误,对于那些想改变它的人来说,这里真的缺少。测量单位没有指定!我强烈反对不鼓励这样做。这里有一个基本假设,即存在一组固定的密度,这是不正确的。例如,您没有指定xhdpi或tvdpi(较新的密度),所以你不会得到正确的值。@hackbod但根据这个论点,在任何情况下都不能使用密度限定符。对他的values.xml使用密度桶没有什么错。这种方法很好。@boulder是真的吗?在一些android版本上,阴影功能不起作用,因为它不受GPU支持,需要ave类似于:setLayerType(LAYER_TYPE_SOFTWARE,mShadow)?@androiddeveloper不支持绘制矩形。所有android版本都支持文本绘制。@boulder谢谢。我想知道为什么我无法在某些视图中实现它。感谢@nickes,很遗憾我们不得不使用这个:(功能请求已打开:如果希望看到此功能,请使用星号。请注意,将阴影半径设置为>25px将使某些设备崩溃。阴影半径本身不应以DP单位指定,而应始终以PX单位指定。此值指定阴影的模糊程度,而不是阴影的大小。阴影的大小为d由文本的大小决定。
<?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="2dp"
app:shadowDx="2dp"
app:shadowDy="2dp"
/>
</RelativeLayout>