setStrokeColor не работает программно - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь установить свой цвет для контура моей кнопки, но я не могу заставить его работать

Я использую кнопку материала, и когда я использую

  button.setStrokeColorResource(Color.parseColor(#e4dcd4))

не работает и сообщает мне об этом

Ожидается идентификатор ресурса цвета (R.color.), Но получено целое число RGB

Я перепробовал почти все, что смог найти примерно в стеке, но я не могу заставить его установить этот штрих-код программно

Редактировать

Почти все setColors используют @ColorInt, но этот штрих-код использует @ColorRes, что у меня не работает, также есть setStrokeColor

public void setStrokeColor(@Nullable ColorStateList strokeColor) {
    if (isUsingOriginalBackground()) {
      materialButtonHelper.setStrokeColor(strokeColor);
    }
  }

Но я также не могу заставить его работать.

Ответы [ 3 ]

1 голос
/ 29 января 2020

Вы можете попробовать это

button.setStrokeColor(ContextCompat.getColor(this, R.color.your_color_xml));

Другой способ сделать это -

ShapeDrawable gradientDrawable = (ShapeDrawable)button.getBackground(); 
gradientDrawable.setStroke(2, your_color); 

Также, как сказал @Gabriele, вы можете получить int в виде цвета:

//From RGB
int colorRGB = Color.rgb(255,0,0);

//From HEX String
int colorHEX = Color.parseColor("#FF11AA");
0 голосов
/ 29 января 2020

Вы должны установить ширину обводки, потому что значение по умолчанию равно 0.

<Button 
app:strokeWidth="2dp"
../>

button.strokeColor = ColorStateList.valueOf(Color.parseColor("#e4dcd4"))

или

// если цвет определяется цветом. xml

 button.strokeColor = ColorStateList.valueOf(ContextCompat.getColor(this, R.color.yourColorCOde))

// если у вас другое состояние и вы хотите установить его программно, выполните следующие действия: -

 var states = arrayOf(
            intArrayOf(R.attr.state_enabled),
            intArrayOf(-R.attr.state_enabled),
            intArrayOf(-R.attr.state_checked),
            intArrayOf(R.attr.state_pressed)
        )

// Список цветов определяет отношение к состоянию

 var colors = intArrayOf(
        Color.BLACK,
        Color.RED,
        Color.GREEN,
        Color.BLUE
    )

/ / Установить цвет обводки

button.strokeColor = ColorStateList(states, colors)
0 голосов
/ 29 января 2020

Это сработало так

val colorInt = Color.parseColor("#e4dcd4")
            val csl = ColorStateList.valueOf(colorInt)
            my_button.strokeColor = csl
...