webentwicklung-frage-antwort-db.com.de

Programmgesteuertes Abrunden von Ecken und Festlegen zufälliger Hintergrundfarben

Ich möchte die Ecken einer Ansicht abrunden und die Farbe der Ansicht basierend auf dem Inhalt zur Laufzeit ändern.

TextView v = new TextView(context);
v.setText(tagsList.get(i));
if(i%2 == 0){
    v.setBackgroundColor(Color.RED);
}else{
    v.setBackgroundColor(Color.BLUE);
}

v.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
v.setPadding(twoDP, twoDP, twoDP, twoDP);               
v.setBackgroundResource(R.drawable.tags_rounded_corners);

Ich hatte gehofft, dass sich eine Zeichen- und eine Farbeinstellung überlappen würden, aber das tun sie nicht. Welches ich als zweites ausführe, ist der resultierende Hintergrund.

Gibt es eine Möglichkeit, diese Ansicht programmgesteuert zu erstellen, wobei zu berücksichtigen ist, dass die Hintergrundfarbe erst zur Laufzeit festgelegt wird?

edit: ich tausche jetzt nur zum testen zwischen rot und blau. Später kann der Benutzer die Farbe auswählen.

bearbeiten:

tags_rounded_corners.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <corners 
         Android:bottomRightRadius="2dp" 
         Android:bottomLeftRadius="2dp" 
         Android:topLeftRadius="2dp" 
         Android:topRightRadius="2dp"/>
</shape>
102
John Moffitt

Rufen Sie anstelle von setBackgroundColor den zu zeichnenden Hintergrund ab und legen Sie seine Farbe fest:

v.setBackgroundResource(R.drawable.tags_rounded_corners);

GradientDrawable drawable = (GradientDrawable) v.getBackground();
if (i % 2 == 0) {
  drawable.setColor(Color.RED);
} else {
  drawable.setColor(Color.BLUE);
}

Außerdem können Sie die Auffüllung in Ihrem tags_rounded_corners.xml Definieren:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
  <corners Android:radius="4dp" />
  <padding
    Android:top="2dp"
    Android:left="2dp"
    Android:bottom="2dp"
    Android:right="2dp" />
</shape> 
189
chiuki

Umfassender programmatischer Ansatz zum Festlegen abgerundeter Ecken und Hinzufügen einer zufälligen Hintergrundfarbe zu einer Ansicht. Ich habe den Code nicht getestet, aber Sie haben die Idee.

 GradientDrawable shape =  new GradientDrawable();
 shape.setCornerRadius( 8 );

 // add some color
 // You can add your random color generator here
 // and set color
 if (i % 2 == 0) {
  shape.setColor(Color.RED);
 } else {
  shape.setColor(Color.BLUE);
 }

 // now find your view and add background to it
 View view = (LinearLayout) findViewById( R.id.my_view );
 view.setBackground(shape);

Hier verwenden wir Gradient Drawable, damit wir GradientDrawable#setCornerRadius Verwenden können, da ShapeDrawable KEINE solche Methode bereitstellt.

109
JaydeepW

Ich denke, der schnellste Weg, dies zu tun, ist:

GradientDrawable gradientDrawable = new GradientDrawable(
            GradientDrawable.Orientation.TOP_BOTTOM, //set a gradient direction 
            new int[] {0xFF757775,0xFF151515}); //set the color of gradient
gradientDrawable.setCornerRadius(10f); //set corner radius

//Apply background to your view
View view = (RelativeLayout) findViewById( R.id.my_view );
if(Build.VERSION.SDK_INT>=16)
     view.setBackground(gradientDrawable);
else view.setBackgroundDrawable(gradientDrawable);    
9
Nolesh

Sie können es besser erreichen, indem Sie DrawableCompat wie folgt verwenden:

Drawable backgroundDrawable = view.getBackground();             
DrawableCompat.setTint(backgroundDrawable, newColor);
8

Wenn Sie keinen Schlaganfall haben, können Sie verwenden

colorDrawable = resources.getDrawable(R.drawable.x_sd_circle); 

colorDrawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);

dies ändert jedoch auch die Strichfarbe

5
Akhil Dad

Sie können die Farbe beliebiger Elemente (Layout, Textansicht) dynamisch ändern. Versuchen Sie den folgenden Code, um die Farbe im Layout programmgesteuert festzulegen

in activity.Java Datei


String quote_bg_color = "#FFC107"
quoteContainer= (LinearLayout)view.findViewById(R.id.id_quotecontainer);
quoteContainer.setBackgroundResource(R.drawable.layout_round);
GradientDrawable drawable = (GradientDrawable) quoteContainer.getBackground();
drawable.setColor(Color.parseColor(quote_bg_color));

erstellen Sie layout_round.xml in einem zeichnungsfähigen Ordner

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <solid Android:color="@color/colorPrimaryLight"/>
    <stroke Android:width="0dp" Android:color="#B1BCBE" />
    <corners Android:radius="10dp"/>
    <padding Android:left="0dp" Android:top="0dp" Android:right="0dp" Android:bottom="0dp" />
</shape>

layout in der Datei activity.xml

<LinearLayout
        Android:id="@+id/id_quotecontainer"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:orientation="vertical">

----other components---

</LinearLayout>


0
Suman Sarkar