2017-01-12 5 views
1

Мне нужна ваша помощь с чем-то, что я пытаюсь сделать, я пытался сделать кнопку с закругленными углами и показывать только ее границу, мне нужно иметь возможность изменить цвет программно зависит от того, что я получаю от веб-службы, до сих пор я пытался добавить фигуру с возможностью рисования, и она придала округлую форму цвету границы, но я не могу, если можно изменить его цвет, потому что его по умолчанию добавляется в вытяжкеКнопка с закругленными углами и границами с цветом

<?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"/> 

, что это вытяжка я использовал, то я пытался добавить форму создания пользовательского класса для кнопки и изменения метода OnDraw, и им получить форму, но это своего рода странно

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); 

} 

и по какой-то причине, кроме странной формы им, добавив текст программным методом набора текста и его не показывает, он получает цвет для удара, но не текст

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

ответ

5

Это одно, что вам нужно.

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); 
} 

Вы можете изменить угловой радиус и ширину хода в зависимости от того, что вам нужно. Надеюсь, это поможет!

+0

спасибо! было легче, чем я думал –

0

Используйте GradientDrawable, чтобы получить представление и изменение:

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

Здесь 3 предопределенный ширина штриха и Color.your_color является цвет, который будет поступать из WebService.

3

round_background.xml в выдвижной папке.

<?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> 

набор в качестве фона

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

Изменение его во время выполнения с любой точки зрения.

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