2011-07-28 8 views
12

XMLファイル:android:drawableBottom属性と組み合わせて使用​​すると描画可能な図形が表示されません。 RES /描画可能/ gradient_box.xmlに保存

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient 
     android:startColor="#FFFF0000" 
     android:endColor="#80FF00FF" 
     android:angle="45"/> 
    <padding android:left="7dp" 
     android:top="7dp" 
     android:right="7dp" 
     android:bottom="7dp" /> 
    <corners android:radius="8dp" /> 
</shape> 

(上記の形状定義は、その後のAndroid開発者向けガイドから取られていることに誤りはありません。。)。

はのは、TextViewのと一緒にそれを使用してみましょう:

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:text="Text with some crazy rectangle shape below it." 
    android:drawableBottom="@drawable/gradient_box"/> 

のTextViewが表示drawableBottom属性が存在しなかったかのように!しかしながら、背景としての形状を設定するだけで正常に動作:アンドロイドに実際の画像(例えば、*の.PNG)を設定

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:text="Text with crazy background" 
    android:background="@drawable/gradient_box"/> 

:drawableBottomも正常に動作します。

アイデア?

答えて

31

解決済み!問題は、形状に必ずしも本質的な境界があるとは限りません。つまり、結果として得られるdrawableは、それ自身を描く方法を知らない!

単にこのように、形状のサイズを指定し、この問題を解決する:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient 
     android:startColor="#FFFF0000" 
     android:endColor="#80FF00FF" 
     android:angle="45"/> 
    <padding android:left="7dp" 
     android:top="7dp" 
     android:right="7dp" 
     android:bottom="7dp" /> 
    <corners android:radius="8dp" /> 
    <size android:width="xxdp" 
      android:height="xxdp"/> 
</shape> 

形状のTextViewの背景描画可能として指定された場合に、その寸法が同じであることが知られていましたTextViewディメンションTextViewの右または上に移動するようにシェイプを指示すると、シェイプディメンションを自動的に決定できませんでした。

+4

このような場合は、match_parentの幅を設定することはできません。 –

+1

グラデーション描画をプログラムで設定したときにグラデーション描画を設定するには、ここでは https://stackoverflow.com/questions/8481322/create-a-radial-gradient-programmatically – foo

1

ImageViewを使用して線の形を "android:src"属性の一部として使用する場合は、形状xmlの一部として幅と高さを指定しない限り同じ問題が発生します。 1つの回避策は、ImageViewの "android:background"属性の一部としてラインシェイプをホストすることです。このようにして、線の形状を「表示」するためにImageViewのサイズ属性を使用することができます。

関連する問題