2013-11-21 13 views
6

Da das Farbschema meiner Anwendung dynamisch ist, kann ich nur Hintergrund-Drawables mit Farben und Shapedrawables erstellen, Ich möchte einen Edittext-Hintergrund erstellen, der wie unten gezeigt mit Farben und Formen gezeichnet werden kann. Aber ich möchte das programmatisch tunLayerDrawable programmgesteuert

Wie man diese selbe zeichnest programmatisch?

<item> 
    <shape> 
     <solid android:color="@android:color/yellow" /> 
    </shape> 
</item> 

<!-- main color --> 
<item 
    android:bottom="1dp" 
    android:left="1dp" 
    android:right="1dp"> 
    <shape> 
     <solid android:color="@android:color/white" /> 
    </shape> 
</item> 

<!-- draw another block to cut-off the left and right bars --> 
<item android:bottom="10dp"> 
    <shape> 
     <solid android:color="@android:color/white" /> 
    </shape> 
</item> 

das ist, was ich versucht ....

GradientDrawable border = new GradientDrawable(); 
    border.setShape(GradientDrawable.RECTANGLE); 
    border.setColor(Color.WHITE); 

    GradientDrawable background = new GradientDrawable(); 
    background.setShape(GradientDrawable.RECTANGLE); 
    background.setColor(Color.YELLOW); 


    GradientDrawable clip = new GradientDrawable(); 
    clip.setShape(GradientDrawable.RECTANGLE); 
    border.setColor(Color.WHITE); 

    Drawable[] layers = {background, border, clip}; 
    LayerDrawable layerDrawable = new LayerDrawable(layers); 

    layerDrawable.setLayerInset(0, 0, 0, 0, 0); 
    layerDrawable.setLayerInset(1, 1, 0, 1, 1); 
    layerDrawable.setLayerInset(2, 0, 0, 0, 10); 

aber das Ergebnis ist anders .... bitte helfen ....!

+0

Wenn Ihr App-Theme dynamisch ist, warum verwenden Sie keine Styles? http://developer.android.com/guide/topics/ui/themes.html –

+0

Ich kann Werte wie Farben in XML auch nicht behalten ... in meinem Fall kommen Farbwerte vom Server sowieso, danke für Ihre Zeit ...:) – zaaak

+0

Haben Sie jemals darüber nachgedacht, einige Bilder zu verwenden und einen Farbfilter auf diese Bilder anzuwenden, um die Themen zu implementieren? – Alan

Antwort

20

Ich habe es endlich funktioniert ... Statt GradientDrawable der Verwendung i ShapeDrawable verwendet ... das ist alles .... :)

dieses layerDrawable als EditText Hintergrund Einstellung Standard EditText Stile mit regenerieren benutzerdefinierte Farben ...

ShapeDrawable border = new ShapeDrawable(); 
    border.getPaint().setColor(Color.WHITE); 

    ShapeDrawable background = new ShapeDrawable(); 
    background.getPaint().setColor(Color.BLACK); 


    ShapeDrawable clip = new ShapeDrawable(); 
    clip.getPaint().setColor(Color.WHITE); 

    Drawable[] layers = {background, border, clip}; 
    LayerDrawable layerDrawable = new LayerDrawable(layers); 

    layerDrawable.setLayerInset(0, 0, 0, 0, 0); 
    layerDrawable.setLayerInset(1, 1, 0, 1, 1); 
    layerDrawable.setLayerInset(2, 0, 0, 0, 10); 

`

+6

Mehr Erklärung wäre besser gewesen. – jcaruso

+0

Genau die Hilfe, die ich brauchte, danke – JamisonMan111

0

Dies funktioniert auch mit Gradient Drawables:

GradientDrawable border = new GradientDrawable(); 
border.setColor(Color.White); 

GradientDrawable background = new GradientDrawable(); 
background.setColor(Color.Black); 

GradientDrawable clip = new GradientDrawable(); 
clip.setColor(Color.White); 

GradientDrawable[] layers = {background, border, clip}; 
LayerDrawable layerDrawable = new LayerDrawable(layers); 

layerDrawable.setLayerInset(0, 0, 0, 0, 0); 
layerDrawable.setLayerInset(1, 1, 0, 1, 1); 
layerDrawable.setLayerInset(2, 0, 0, 0, 10); 
Verwandte Themen