【问题标题】:setStrokeColor not working programmaticallysetStrokeColor 无法以编程方式工作
【发布时间】:2020-01-28 22:24:46
【问题描述】:

我正在尝试为按钮的轮廓设置颜色,但无法正常工作

我正在使用材质按钮以及何时使用

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

不工作并告诉我这个

需要一个颜色资源 ID (R.color.),但收到一个 RGB 整数

我尝试了几乎所有我能在堆栈中找到的东西,但我无法以编程方式设置这个 strokeColor

编辑

几乎所有 setColors 都使用 @ColorInt ,但是这个 strokeColor 使用 @ColorRes,这对我不起作用,还有 setStrokeColor

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

但我也无法让它工作。

【问题讨论】:

  • 你可以试试`button.setStrokeColor(ContextCompat.getColor(this, R.color.your_color_xml));`
  • 在第一种方法中,您必须使用 R.color.mycolor 或检查此answer

标签: android android-studio kotlin android-button


【解决方案1】:

它是这样工作的

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

【讨论】:

    【解决方案2】:

    你可以试试这个

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

    【讨论】:

    • @SNM 你解决了吗?为了帮助其他人,如果这有助于您随时投票并将其标记为正确答案。谢谢:)+
    【解决方案3】:

    你必须设置笔画的宽度,因为默认值为0。

    <Button 
    app:strokeWidth="2dp"
    ../>
    
    button.strokeColor = ColorStateList.valueOf(Color.parseColor("#e4dcd4"))
    

    //如果color.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)
    

    【讨论】:

      猜你喜欢
      • 2016-07-09
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多