【问题标题】:Button with rounded corners and border with color带圆角和带颜色边框的按钮
【发布时间】:2017-05-27 15:34:26
【问题描述】:

我需要您的帮助来完成我想做的事情,我一直在尝试制作一个带圆角的按钮并只显示它的边框,我需要能够根据我得到的内容以编程方式更改颜色一个Web服务,到目前为止,我尝试使用drawable添加形状,并且它给出了带有边框颜色的圆形形状,但我不能更改它的颜色,因为它默认添加在drawable中

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

这是我使用的drawable,然后我尝试添加形状,为按钮创建一个自定义类并更改onDraw方法,我得到了一个形状但有点奇怪

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

}

由于某种原因,除了奇怪的形状,我使用 set text 方法以编程方式添加文本并且它没有显示,它得到了笔画的颜色而不是文本

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

【问题讨论】:

    标签: android button rounded-corners


    【解决方案1】:

    这是你需要的。

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

    您可以根据需要更改拐角半径和笔划宽度。 希望对您有所帮助!

    【讨论】:

    • 这对我有用,有一些小注释:上下文不是必需的,setStroke 中的 2f 警告它应该是一个 int,而不是 float。我最后的看法是: public static void setRoundedDrawable(View view, int backgroundColor, int borderColor) { GradientDrawable shape = new GradientDrawable(); shape.setShape(GradientDrawable.RECTANGLE); shape.setCornerRadius(10f); shape.setColor(背景颜色); if (borderColor != 0){ shape.setStroke(2, borderColor); } view.setBackground(形状); }
    【解决方案2】:

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

      【讨论】:

        【解决方案4】:

        实际上,您可以使用 Material Design Button 轻松完成此操作。恕我直言,使用材料设计是 Android 中样式样式的标准方式

        第 1 步:

        将以下依赖添加到模块的build.gradle 文件并同步项目。

        implementation 'com.google.android.material:material:1.0.0'
        

        第 2 步:

        将您的style.xml 应用主题更改为继承here 提到的任何材料组件主题。

        例如:

        <style name="AppTheme" parent="Theme.MaterialComponents.NoActionBar">
        ...
        </style>
        

        第 3 步:

        将按钮的 xml 更改为如下所示

        <com.google.android.material.button.MaterialButton
                    android:text="@string/button_text"
                    android:layout_height="wrap_content"
                    android:layout_width="wrap_content"
                    android:id="@+id/btnRound"
                    style="@style/Widget.MaterialComponents.Button.OutlinedButton"
                    app:cornerRadius="1000dp"
                    app:strokeColor="@color/colorPrimaryDark"/>
        
        • 您可以使用app:cornerRadius 属性值更改按钮的圆度。
        • 将按钮的style 属性设置为@style/Widget.MaterialComponents.Button.OutlinedButton 以使按钮具有轮廓。
        • 使用app:strokeColor属性值设置轮廓颜色。

        参考资料:

        【讨论】:

          猜你喜欢
          • 2012-10-26
          • 2015-07-27
          • 1970-01-01
          • 2020-12-02
          • 1970-01-01
          • 1970-01-01
          • 2013-11-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多