2011-01-31 84 views
18

如何在dip中指定TextView的shadowDx/Dy/Radius值?現在我有:TextView:shadowDx/Dy /半徑在下降?

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

我似乎無法在這些地方指定「1dip」。有沒有辦法做到這一點,而不是在代碼中設置它們,並且自己進行設備密度倍增?

感謝

回答

18

不幸的是唯一的辦法,對不起:(

+1

行,沒問題。 – user291701 2011-01-31 19:30:19

+0

陰影參數的單位是什麼?是px,pt,dp,sp ...? – 2012-09-02 09:57:55

+13

如果沒有指定,那麼單位總是在px。 – 2012-09-04 16:27:49

17

正如羅曼說,你不能直接在XML設定傾角值。你仍然可以做到這一點的XML,雖然,而不必做雜亂等比例縮放計算在你的代碼。

訣竅是要有獨立的values-hdpivalues-mdpivalues-ldpi文件夾,除了你的正常values文件夾,裏面每一個,創建一個包含樣式應用了陰影文本單獨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> 
22

我創建重寫帶有自定義xml屬性的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裏面的 「值」 資源文件夾

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