2016-03-19 11 views
4

Ich versuche, die solid Farbe eines shape in meinem Fragment zu ändern.Wie ändert man die Solid-Farbe programmgesteuert von einer Form in Android?

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/icon_circle_background"> 
     <shape xmlns:android="http://schemas.android.com/apk/res/android" 
      ...> 
      <solid android:color="@color/md_cyan_400"/> 
     </shape> 
    </item> 
    <item 
     ... 
    </item> 
</layer-list> 

Ich kann nicht scheinen, von meinem Code für den Zugriff auf und ich habe bereits folgende Antworten auf Stack-Überlauf versucht:

Set android shape color programmatically

How to change shape color dynamically?

Change shape solid color at runtime inside Drawable xml used as background

None davon funktionierten oder waren ziemlich veraltet.

Fragment, wo ich versuche, um die Farbe zu ändern:

public class GameFragment extends Fragment { 
    private Theme currentTheme; 
    private Circle currentCircle; 
    private int currentOrganisationId; 
    private List<Card> circleCards; 
    private List<ImageButton> circleButtons; 
    private int viewHeight; 
    private int viewWidth; 
    private int marginCard; 
    private int[] tableStarts; 
    private RelativeLayout background; 
    private ViewTreeObserver vto; 

    public GameFragment() { 
     circleCards = new ArrayList<>(); 
     circleButtons = new ArrayList<>(); 
     tableStarts = new int[9]; 
    } 

    //... 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_game, container, false); 
     ... 
     background = setBackground(rootView); 
     circleCards = currentCircle.getCards(); 

     return rootView; 
    } 

    //... 

    private void drawCards() { 
     circleButtons = new ArrayList<>(); 
     for (Card card : circleCards) { 
      ImageButton myImageButton = new ImageButton(this.getContext()); //generate ImageButton 
      myImageButton.setId(card.getCardId()); //Set Id of button 
      myImageButton.setBackgroundResource(R.drawable.circle_card_icon); 

      //set random color to shape 
      ... 
     } 
    } 
} 
+0

Was bedeutet "ziemlich veraltet"? Sie sollten gut funktionieren. –

+0

@Bob Malooga, versuchte es, gibt mir immer noch diese https://goo.gl/fXL4Pe Code: http://pastebin.com/KqNNTDnU – Edward

Antwort

1
View v = findViewById(R.id.layout_id); 
LayerDrawable shape= (LayerDrawable)v.getBackground(); 
shape.setColor(Color.Black); 
1

Verwendung dieses:

GradientDrawable bgShape = (GradientDrawable)view.getBackground().getCurrent(); 
bgShape.setColor(Color.BLACK); 

.getCurrent geben dem ausgewählten ziehbar layerlist

verwenden diese wird es nicht werfen java.lang.ClassCastException: android.graphics.drawable.GradientDrawable kann nicht in android.gra umgewandelt werden phics.drawable.ShapeDrawable Ausnahme.

es funktioniert perfekt für mich.