2017-01-12 3 views
1

Ich brauche deine Hilfe mit etwas, das ich versuche zu tun, ich habe versucht, einen Knopf mit abgerundeten Ecken zu machen und nur die Grenze davon zu zeigen, muss ich in der Lage sein, zu ändern programmgesteuert abhängig von dem, was ich von einem Web-Service bekomme, habe ich bisher versucht, die Form mit einem Ziehbaren hinzuzufügen und es gab die abgerundete Form mit der Rahmenfarbe, aber ich nicht, wenn es möglich ist, die Farbe zu ändern, weil es im ziehbarKnopf mit abgerundeten Ecken und Rand mit Farbe

<?xml version="1.0" encoding="UTF-8"?> 

<stroke android:width="3dp" 
    android:color="#ff000000" 
    /> 

<padding android:left="1dp" 
    android:top="1dp" 
    android:right="1dp" 
    android:bottom="1dp" 
    /> 

<corners android:bottomRightRadius="7dp" 
    android:bottomLeftRadius="7dp" 
    android:topLeftRadius="7dp" 
    android:topRightRadius="7dp"/> 
standardmäßig hinzugefügt

, dass die ziehbar I wurde mit, dann bin ich versuchte, die Form Erstellen eine benutzerdefinierte Klasse für die Schaltfläche und das Ändern der OnDraw-Methode und im immer eine Form hinzuzufügen, aber irgendwie komisch

Rounded shape

@Override 
protected void onDraw(Canvas canvas) { 
    // TODO Auto-generated method stub 

    Paint paint = new Paint(); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setColor(strokeColor); 
    paint.setStrokeWidth(5.0f); 

    int h = this.getHeight(); 
    int w = this.getWidth(); 
    //final RectF rect = new RectF(); 

    RectF oval1 = new RectF(0, 0, w, h); 
    canvas.drawRoundRect(oval1, 40, 40, paint); 

} 

und aus irgendeinem Grund außer der seltsamen Form im den Text programmatisch mit gesetztem Text Verfahren das Hinzufügen und die nicht angezeigt wird, wird es die Farbe für den Strich, aber nicht den Text

buttonCTA = ButterKnife.findById(this, R.id.btnCTA); 
     buttonCTA.setTextColor(Color.parseColor(valueColor)); 
     buttonCTA.setStrokeColor(valueColor); 
     buttonCTA.setText("test"); 

Antwort

5

Dies ist, was Sie brauchen.

public static void setRoundedDrawable(Context context, View view, int backgroundColor, int borderColor) { 
    GradientDrawable shape = new GradientDrawable(); 
    shape.setShape(GradientDrawable.RECTANGLE); 
    shape.setCornerRadius(20f); 
    shape.setColor(backgroundColor); 
    if (borderColor != 0){ 
     shape.setStroke(2f, borderColor); 
    } 
    view.setBackgroundDrawable(shape); 
} 

Sie können den Eckenradius und die Strichstärke je nach Bedarf ändern. Hoffe es hilft!

GradientDrawable drawable = (GradientDrawable)buttonCTA.getBackground(); 
drawable.setStroke(3, Color.your_color); 

Hier 3 ist die vordefinierte Strichbreite und Color.your_color ist die Farbe, die sich von WebService kommen:

+0

danke! war einfacher als ich dachte –

0

Verwenden GradientDrawable die Ansicht und Modifikation zu erhalten.

3

Erstellen Sie round_background.xml im Zeichnungsordner.

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke 
     android:width="3dp" 
     android:color="#ff000000" /> 

    <padding 
     android:bottom="1dp" 
     android:left="1dp" 
     android:right="1dp" 
     android:top="1dp" /> 

    <corners 
     android:bottomLeftRadius="7dp" 
     android:bottomRightRadius="7dp" 
     android:topLeftRadius="7dp" 
     android:topRightRadius="7dp" /> 
</shape> 

Set als Hintergrund

<Button 
     android:id="@+id/mybutton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/round_background" 
     android:text="Hello World!" /> 

ändert es zur Laufzeit mit einem beliebigen Ansicht.

Button button = (Button) findViewById(R.id.mybutton); 
GradientDrawable drawable = (GradientDrawable)button.getBackground(); 
drawable.setStroke(2, Color.YELLOW); 
Verwandte Themen