如何在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“。除了在代码中设置它们并自己进行设备密度乘法之外,还有什么方法可以做到吗?
谢谢
发布于 2011-02-01 03:19:33
不幸的是,这是唯一的办法,对不起:
发布于 2012-09-05 17:32:08
我创建了一个带有自定义xml属性的重写TextView,以便以一种方便的方式处理此问题。
它也可以作为库使用:https://github.com/rongi/text-view-shadow-dips
public class TextViewShadowDips extends TextView {
public TextViewShadowDips(Context context, AttributeSet attrs) {
super(context, attrs);
final TypedArray attributes = context.obtainStyledAttributes(attrs, R.styleable.TextViewShadowDips);
// App can crash on some devices if shadow radius is more than 25 pixels
// On Samsung Galaxy S6 this crash happens when you copy a text from an input field
// https://stackoverflow.com/questions/4866928/ranges-for-radius-in-shadowradius-and-visiblity-in-textview?lq=1
final float shadowRadius = Math.min(
attributes.getDimension(R.styleable.TextViewShadowDips_shadowRadius, 0f),
25f
);
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();
}"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>发布于 2011-04-25 16:57:44
正如Romain所说,您不能直接在XML中设置dip值。不过,您仍然可以在XML中执行此操作,而不必在代码中进行繁琐的缩放计算。
诀窍是除了普通的values文件夹之外,还要有单独的values-hdpi、values-mdpi和values-ldpi文件夹。在每个元素中,创建一个单独的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>https://stackoverflow.com/questions/4854935
复制相似问题