Android text视图:阴影dx/Dy/倾斜半径?

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>

如何在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>

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