2013-12-20 13 views
18

Ich versuche, die Farbe der selectable_kachel_shape programmgesteuert zu ändern. Hier ist die XML-Datei:Ändern der Farbe in einer Form in einer Ebenenliste programmgesteuert

kachel_ticked_style.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 


    <item> 
     <shape 
      android:id="@+id/selectable_kachel_shape" 
      android:shape="rectangle" > 
      <stroke 
       android:width="5dp" 
       android:color="@color/headrbar_color" /> 
     </shape> 
    </item> 
    <item> 
     <rotate 
      android:fromDegrees="45" 
      android:pivotX="120%" 
      android:pivotY="100%" 
      android:toDegrees="45" > 
      <shape android:shape="line" > 
       <stroke 
        android:width="40dp" 
        android:color="@color/headrbar_color" /> 
      </shape> 
     </rotate> 
    </item> 
    <item 
     android:right="5dp" 
     android:top="5dp"> 
     <bitmap 
      android:gravity="top|right" 
      android:src="@drawable/selectable_tiles_check" /> 
    </item> 

</layer-list> 

ich in einem Fragment nenne den folgenden Code

LayerDrawable layers = (LayerDrawable) this.getActivity().getResources().getDrawable(R.drawable.kachel_ticked_style); 

GradientDrawable shape = (GradientDrawable) (layers.findDrawableByLayerId(R.id.selectable_kachel_shape)); 
         shape.setColor(this.getActivity().getResources().getColor(android.R.color.background_dark); 

1.Why bin ich eine Nullpointer in Form Geting. SetColor?

2.Wie wäre es möglich, die Farbe innerhalb einer Form, das heißt innerhalb einer Ebenenliste, programmgesteuert zu ändern?

Antwort

24

Ok ich die Antwort gefunden, ich hatte gerade innerhalb der Artikel die ID der Form setzen nicht in der Form kachel_ticked_style.xml:

<item 
    android:id="@+id/selectable_kachel_shape"> 
     <shape 
      android:shape="rectangle" > 
      <stroke 
       android:width="5dp" 
       android:color="@color/headrbar_color" /> 
     </shape> 
    </item> 

Und dann können Sie entweder die Farbe ändern die Form shape.setColor oder die Farbe des Strichs Aufruf shape.setStroke (stroke, stroke)

+0

aber hat die gleiche problem.This funktioniert nicht für mich –

+0

Nun @ji Aufruf Ncyabraham können Sie die Ansicht dann seinen Hintergrund zeichnen dann erhalten die Form als Gradiendrawable wie hier [Link] (http://stackoverflow.com/questions/16636412/change-shape-solid-color-at-runtime-inside-in- drawable-xml-used-as-background) – M090009

+0

Können Sie bitte zeigen, welche Schritte Sie unternommen haben, um das Shape-Objekt zu erhalten, ist es unklar. –