精华内容
下载资源
问答
  • android自定义圆角button
    2021-06-04 01:44:50

    话题来源:最近接触个新项目,需要在项目中加个圆角按钮。美工只给了个效果图和颜色值标记,按照以前的经验创建三个xml文件,一个定义selector标签选择器,另外两个用shape标签来定义按钮正常和点击状态。写过之后同事说项目中定义过这个样式,文件太多没找到,只有使用这三个xml文件来定义这个Button的样式。

    功能做好后,思考了一下,创建三个xml文件来修饰一个Button太大动干戈了,项目中xml文件将会冗余难管理。可不可以自定义一个Button控件,我们只需要在xml中指定Button的圆角半径和颜色就可以定义一个按钮呢?

    使用方式:

    1、把自定义按钮的java类AA_Button_Circle.java复制到自己的java包中,再将styleable_aa_button_circle.xml复制到values文件夹中。

    2、在用到这个按钮的布局文件中添加,自己指定控件的宽高等属性

    实现原理:

    1、安卓的selector可以在代码中用StateListDrawable实现。

    2、shap可以在代码中用GradientDrawable来实现;

    3、安卓通过declare-styleable标签给自定义控件添加自定义属性;

    4、在使用自定义标签时要使用xmlns:myapp="http://schemas.android.com/apk/res-auto",其中xmlns:myapp中的myapp只是个标记,自己可以改成任意字母组合

    实现代码:

    AA_Button_Circle.java

    /**

    * 定义控件属性的文件styleable_aa_button_circle.xml

    *

    *xml中使用时先加入xmlns:myapp="http://schemas.android.com/apk/res-auto" ,再定义属性如:

    * myapp:aa_bg_color="#f39800" myapp:aa_corner_radius="5dp"

    *

    *@authorAdministrator

    *

    */

    public class AA_Button_Circleextends Button {

    public AA_Button_Circle(Contextcontext) {

    super(context);

    }

    /**

    * 如果没有配置按钮颜色使用默认颜色

    */

    private static final StringDefaultColor ="#2196F3";

    /**

    * 如果没有配置圆角半径,使用默认圆角半径

    */

    private static final int DefaultRadius = 2;

    /**

    * 初始化填充颜色,默认值为blue500

    */

    private ColorStateList fillColor;

    private ColorStateList fillColor_pressed;

    @SuppressLint("Recycle")

    public AA_Button_Circle(Contextcontext, AttributeSetattrs) {

    super(context,attrs);

    TypedArray myattrs = context.obtainStyledAttributes(attrs, R.styleable.aa_button_circle, 0, 0);

    // 获取圆角半径

    float cornerRadius =myattrs.getDimensionPixelSize(R.styleable.aa_button_circle_aa_corner_radius,

    DefaultRadius);

    // 获取填充颜色

    fillColor = myattrs.getColorStateList(R.styleable.aa_button_circle_aa_bg_color);

    if (fillColor ==null) {

    fillColor = ColorStateList.valueOf(Color.parseColor(DefaultColor));

    }

    // 获取点击后颜色,默认是按钮颜色的一半透明度

    fillColor_pressed = myattrs.getColorStateList(R.styleable.aa_button_circle_aa_pressed_bg_color);

    if (fillColor_pressed ==null) {

    // 通过修改透明度产生点击效果

    // fillColor_pressed =

    // ColorStateList.valueOf(changeAlpha(fillColor.getDefaultColor(),

    // 127));

    // 添加白色占比

    fillColor_pressed = ColorStateList.valueOf(add_White(fillColor.getDefaultColor(), 30));

    // 通过修改亮度产生点击效果

    // fillColor_pressed =

    // ColorStateList.valueOf(change_White_Black(fillColor.getDefaultColor(),

    // -20));

    }

    int fillColor1 =fillColor.getDefaultColor();// 内部填充颜色

    GradientDrawable gd1 = new GradientDrawable();// 创建drawable

    gd1.setColor(fillColor1);

    gd1.setCornerRadius(cornerRadius);

    GradientDrawable gd2 = new GradientDrawable();// 创建drawable

    gd2.setColor(fillColor_pressed.getDefaultColor());

    gd2.setCornerRadius(cornerRadius);

    // 定义选择器

    StateListDrawable selector = new StateListDrawable();

    selector.addState(new int[] { -android.R.attr.state_pressed },gd1);

    selector.addState(new int[] { android.R.attr.state_pressed },gd2);

    this.setBackgroundDrawable(selector);

    this.setTextColor(Color.WHITE);

    }

    /**

    * 修改颜色透明度

    *

    *@paramcolor

    *@paramalpha

    *@return

    */

    public int changeAlpha(int color,int alpha) {

    int red = Color.red(color);

    int green = Color.green(color);

    int blue = Color.blue(color);

    return Color.argb(alpha,red,green, blue);

    }

    /**

    * 修改亮度

    *

    *@paramcolor

    *@parampercent,正数为变亮,负数为变暗

    *@return

    */

    public int change_White_Black(int color,int percent) {

    int red = Color.red(color);

    int green = Color.green(color);

    int blue = Color.blue(color);

    red = red * (100 + percent) / 100;

    green = green * (100 + percent) / 100;

    blue = blue * (100 + percent) / 100;

    red = (red < 255) ?red : 255;

    green = (green < 255) ?green : 255;

    blue = (blue < 255) ?blue : 255;

    return Color.argb(Color.alpha(color),red,green, blue);

    }

    /**

    * 合成白色

    *

    *@paramcolor

    *@parampercent,0-100占比

    *@return

    */

    public int add_White(int color,int percent) {

    int red = Color.red(color);

    int green = Color.green(color);

    int blue = Color.blue(color);

    red = (red * (100 -percent) + 255 *percent) / 100;

    green = (green * (100 -percent) + 255 *percent) / 100;

    blue = (blue * (100 -percent) + 255 *percent) / 100;

    red = (red < 255) ?red : 255;

    green = (green < 255) ?green : 255;

    blue = (blue < 255) ?blue : 255;

    return Color.argb(Color.alpha(color),red,green, blue);

    }

    styleable_aa_button_circle.xml

    更多相关内容
  • 在平时开发过程中经常会碰到需要使用圆角button的情况,一般也会包括很多其他小功能,比如要在里面添加img,设置不同的圆角大小等。 针对这样的场景,直接使用创建多个shape,定义多个xml文件也是可以实现的。但是...
  • 在平时开发过程中经常会碰到需要使用圆角button的情况,一般也会包括很多其他小功能,比如要在里面添加img,设置不同的圆角大小等。 针对这样的场景,直接使用创建多个shape,定义多个xml文件也是可以实现的。但是...

    概述

    在平时开发过程中经常会碰到需要使用圆角button的情况,一般也会包括很多其他小功能,比如要在里面添加img,设置不同的圆角大小等。
    针对这样的场景,直接使用创建多个shape,定义多个xml文件也是可以实现的。但是如果使用非常频繁,那么直接自定义一个就会来的非常方便。

    甚至在一些情况下,不是可以用shape定义的规则图形,比如需要用到贝塞尔曲线等。
    如果全局需要这样风格的view,那么自定义一个View是非常必要的。

    本文主要是个demo记录,如有需要的读者可以借鉴学习。

    Demo

    主要实现功能:

    1. 自定义圆角大小
    2. 支持设置leftDrawable,和自定义文字内容(文字和img默认居中)
    3. 支持点击效果

    源码

    RoundRadiusButton.java

    /**
     * author: xujiajia
     * description:
     * 1、drawable只有在设置textString的时候才会生效(居中效果两个一起测量)
     */
    public class RoundRadiusButton extends View {
    
      //data
      private int width = 0;
      private int height = 0;
      private int roundRadius = 16;
      private int bgColor = Color.LTGRAY;
      private boolean isTouching = false;
    
      //img and text
      private Drawable leftDrawable = null;
      private int drawableWidth = 20;
      private int drawableHeight = 20;
      private int leftDrawablePaddingRight = 0;
      private String textString;
      private int textSize = 30;
      private int textColor = Color.BLACK;
    
      //onDraw
      Paint paint;
      Path path;
      RectF rectF;
      Rect rect;
    
      public RoundRadiusButton(Context context, int width, int height) {
        super(context);
    
        this.width = width;
        this.height = height;
    
        this.setLayoutParams(new ViewGroup.LayoutParams(width, height));
        this.setClickable(true);
      }
    
      public RoundRadiusButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        getDataFromAttrs(context, attrs);
        this.setClickable(true);
      }
    
      public RoundRadiusButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        getDataFromAttrs(context, attrs);
        this.setClickable(true);
      }
    
      private void getDataFromAttrs(Context context, AttributeSet attrs) {
        if (attrs == null) {
          return;
        }
        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.RoundRadiusButton);
        roundRadius = ta.getDimensionPixelOffset(R.styleable.RoundRadiusButton_roundRadius, 16);
        bgColor = ta.getColor(R.styleable.RoundRadiusButton_bgColor, Color.LTGRAY);
        leftDrawable = ta.getDrawable(R.styleable.RoundRadiusButton_leftDrawable);
        drawableWidth = ta.getDimensionPixelOffset(R.styleable.RoundRadiusButton_drawableWidth, 0);
        drawableHeight = ta.getDimensionPixelOffset(R.styleable.RoundRadiusButton_drawableHeight, 0);
        leftDrawablePaddingRight =
            ta.getDimensionPixelOffset(R.styleable.RoundRadiusButton_leftDrawablePaddingRight, 0);
        textString = ta.getString(R.styleable.RoundRadiusButton_textString);
        textSize = ta.getDimensionPixelOffset(R.styleable.RoundRadiusButton_textSize, 0);
        textColor = ta.getColor(R.styleable.RoundRadiusButton_textColor, Color.BLACK);
        ta.recycle();
      }
    
      public void setRoundRadius(int roundRadius) {
        this.roundRadius = roundRadius;
        invalidate();
      }
    
      public void setBgColor(int bgColor) {
        this.bgColor = bgColor;
        invalidate();
      }
    
      public void setLeftDrawable(Drawable leftDrawable, int drawableWidth, int drawableHeight,
          int paddingRight) {
        this.leftDrawable = leftDrawable;
        this.drawableWidth = drawableWidth;
        this.drawableHeight = drawableHeight;
        this.leftDrawablePaddingRight = paddingRight;
        invalidate();
      }
    
      public void setTextString(String textString) {
        this.textString = textString;
        invalidate();
      }
    
      public void setTextColor(int textColor) {
        this.textColor = textColor;
        invalidate();
      }
    
      public void setTextSize(int textSize) {
        this.textSize = textSize;
        invalidate();
      }
    
      @Override public boolean onTouchEvent(MotionEvent event) {
        if (isClickable()) {
          switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
              isTouching = true;
              invalidate();
              break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
              isTouching = false;
              invalidate();
              break;
          }
        }
        return super.onTouchEvent(event);
      }
    
      @Override protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (width == 0 || height == 0) {
          width = getWidth();
          height = getHeight();
        }
    
        if (paint == null) {
          paint = new Paint();
        }
        if (path == null) {
          path = new Path();
        }else {
          path.reset();
        }
        if (rectF == null) {
          rectF = new RectF();
        }
        if (rect == null) {
          rect = new Rect();
        }
    
        paint.setColor(bgColor);
        paint.setAntiAlias(true);//抗锯齿
        paint.setStrokeWidth(0);//线的宽度设为0,避免画圆弧的时候部分圆弧与边界相切
        paint.setStyle(Paint.Style.FILL_AND_STROKE);
        path.setFillType(Path.FillType.WINDING);
    
        //左上圆角
        path.moveTo(0, roundRadius);
        rectF.set(0, 0, 2 * roundRadius,
            2 * roundRadius);
        path.addArc(rectF, 180, 90);
        //上边
        path.lineTo(width - roundRadius, 0);
        //右上圆角
        rectF.set(width - roundRadius * 2, 0, width, roundRadius * 2);
        path.addArc(rectF, -90, 90);
        //右边
        path.lineTo(width, height - roundRadius);
        //右下圆角
        rectF.set(width - roundRadius * 2, height - roundRadius * 2, width,
            height);
        path.addArc(rectF, 0, 90);
        //下边
        path.lineTo(roundRadius, height);
        //左下圆角
        rectF.set(0, height - roundRadius * 2, 2 * roundRadius,
            height);
        path.addArc(rectF, 90, 90);
        //左边
        path.lineTo(0, roundRadius);
        path.close();
    
        //填充背景中间空白的部分
        path.moveTo(0, roundRadius);
        path.lineTo(width - roundRadius, 0);
        path.lineTo(width, height - roundRadius);
        path.lineTo(roundRadius, height);
        path.close();
        canvas.drawPath(path, paint);
        if (isTouching) {
          paint.setColor(getContext().getResources().getColor(R.color.black_tran_30));
          canvas.drawPath(path, paint);
        }
    
        //text, drawable两个一起计算位置
        if (!TextUtils.isEmpty(textString)) {
          paint.setStrokeWidth(1.5f);
          paint.setColor(textColor);
          paint.setTextSize(textSize);
          rect.setEmpty();
          paint.getTextBounds(textString, 0, textString.length(), rect);
    
          float leftBitmap = 0;
          float topBitmap = 0;
          if (leftDrawable != null) {
            if (leftDrawable != null) {
              leftBitmap = (1.0f * width - drawableWidth - rect.width() - leftDrawablePaddingRight) / 2;
              topBitmap = (1.0f * height - drawableHeight) / 2;
              leftDrawable.setBounds((int) leftBitmap, (int) topBitmap,
                  (int) (leftBitmap + drawableWidth),
                  (int) (topBitmap + drawableHeight));
    
              leftDrawable.draw(canvas);
            }
          }
    
          float textX = 0;
          float textY =
              1.0f * height / 2 + paint.getTextSize() / 2 - paint.getFontMetrics().descent / 2;
          if (leftBitmap == 0 && topBitmap == 0) {
            textX = width / 2 - rect.width() / 2;
          } else {
            textX = leftBitmap + drawableWidth + leftDrawablePaddingRight;
          }
          canvas.drawText(textString, textX, textY, paint);
        }
      }
    }
    

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/ll_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#868684"
        android:gravity="center"
        android:orientation="vertical"
        tools:context=".MainActivity"
        >
    
      <com.example.newbuttiontest.RoundRadiusButton
          android:layout_width="300dp"
          android:layout_height="200dp"
          app:bgColor="#FFEB3B"
          app:drawableHeight="18dp"
          app:drawableWidth="18dp"
          app:leftDrawable="@mipmap/ic_launcher"
          app:leftDrawablePaddingRight="5dp"
          app:roundRadius="30dp"
          app:textColor="#FF4329"
          app:textSize="16dip"
          app:textString="testtesttest"
          />
    
    </LinearLayout>
    

    attrs.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
      <declare-styleable name="RoundRadiusButton">
        <attr name="roundRadius" format="dimension" />
        <attr name="bgColor" format="color" />
        <attr name="leftDrawable" format="reference" />
        <attr name="leftDrawablePaddingRight" format="dimension" />
        <attr name="drawableWidth" format="dimension" />
        <attr name="drawableHeight" format="dimension" />
        <attr name="textString" format="string" />
        <attr name="textSize" format="dimension" />
        <attr name="textColor" format="color" />
      </declare-styleable>
    </resources>
    

    colors.xml

    <resources>
      <color name="black_tran_30">#30000000</color>
    </resources>
    
    展开全文
  • Android 自定义圆角布局

    千次阅读 2021-10-29 16:36:50
    android 开发中,图片或者button 有圆角的布局显得格外的美观些,所以今天就来 自定义圆角布局,只要把控件放入圆角布局中,然后设置属性就能实现圆角布局样式 接下来就来实现这样的功能 效果图如下: 自定义圆角...

    在android 开发中,图片或者button 有圆角的布局显得格外的美观些,所以今天就来
    自定义圆角布局,只要把控件放入圆角布局中,然后设置属性就能实现圆角布局样式
    接下来就来实现这样的功能

    效果图如下:
    在这里插入图片描述

    自定义圆角布局:

    package com.gcssloop.widget;
    
    import android.content.Context;
    import android.graphics.Canvas;
    import android.util.AttributeSet;
    import android.view.MotionEvent;
    
    展开全文
  • 圆角按钮是我们在做界面时常常遇到的UI样式。通常的办法,是做一个drawable,比如这样:xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle">在Layout文件里Button的...

    圆角按钮是我们在做界面时常常遇到的UI样式。

    通常的办法,是做一个drawable,比如这样:

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:shape="rectangle">

    在Layout文件里Button的background属性设上这个drawable.xml,就可以了。

    然而这样做的话,每次弄个按钮都得新做一个drawable文件,各种drawable多了看着就乱。

    是不是可以把color和radius放到Button的属性里去,这样就不用每次再拖一个drawable.xml了是吧?

    自定义RoundCornerButton

    android:id="@+id/btn_commit"

    android:layout_width="100dp"

    android:layout_height="40dp"

    android:gravity="center"

    android:text="我的按钮"

    app:rcb_backgroundColor="@color/yellow"

    app:rcb_backgroundColorDisabled="@color/light_grey"

    app:rcb_cornerRadius="20dp"

    />

    如果可以这样在Layout文件里直接设置背景色和圆角半径,是不是很方便!虽然不如drawable灵活,但是已经足以应付设计同学给出的圆角按钮的需求了。

    我们就以定义自己的styleable属性开始吧

    从Drawable扩展一个自己的Drawable,很简单

    从构造方法传入color和radius,并创建一个实习的画笔;

    覆写draw方法,有现成的画圆角矩形的方法可以调用;

    暴露一个setRect方法给外边,用于设置绘制区域的宽高。

    class RoundCornerDrawable extends Drawable {

    final int color;

    final float radius;

    final Paint paint;

    final RectF rectF;

    RoundCornerDrawable(int color, float radius) {

    this.color = color;

    this.radius = radius;

    // 实心的画笔

    this.paint = new Paint();

    paint.setStyle(Paint.Style.FILL);

    paint.setAntiAlias(true);

    paint.setColor(color);

    this.rectF = new RectF();

    }

    // 用于设置Drawable宽高

    public void setRect(int width, int height) {

    this.rectF.left = 0;

    this.rectF.top = 0;

    this.rectF.right = width;

    this.rectF.bottom = height;

    }

    @Override

    public void draw(@NonNull Canvas canvas) {

    canvas.drawRoundRect(rectF, radius, radius, paint); // 画圆角矩形,现成的方法

    }

    // 其余方法略

    }

    定义自己的Button类,有这么几个要点:

    与通常的自定义View一样,覆写三个构造方法;

    从AttributeSet里读取自定义的属性backgroundColor和cornerRadius,这里暂时忽略backgroundColorDisabled;

    每一种状态(例如普通、禁用、按下)是一个RoundCornerDrawable,组合成一个StateListDrawable;

    onLayout的时候,记得改变每一个RoundCornerDrawable的尺寸。

    public class RoundCornerButton extends AppCompatButton {

    private int colorNormal;

    private float cornerRadius;

    private RoundCornerDrawable bgDrawableNormal = null;

    // 省略三个构造方法

    // 构造方法最后一定要调用initCornerBackground完成初始化

    private void initCornerBackground(AttributeSet attrs, int defStyleAttr) {

    TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.RoundCornerButton, defStyleAttr, 0);

    this.cornerRadius = a.getDimension(R.styleable.RoundCornerButton_rcb_cornerRadius, 0);

    this.colorNormal = a.getColor(R.styleable.RoundCornerButton_rcb_backgroundColor, 0);

    makeBackgroundDrawable();

    a.recycle();

    }

    private void makeBackgroundDrawable() {

    bgDrawableNormal = new RoundCornerDrawable(this.colorNormal, this.cornerRadius);

    bgDrawableNormal.setRect(getWidth(), getHeight());

    // 设计通常会给出禁用时的样式以及按下时的样式

    // 所以这里用使用StateListDrawable

    StateListDrawable bgDrawable = new StateListDrawable();

    bgDrawable.addState(new int[]{android.R.attr.state_enabled, -android.R.attr.state_pressed}, bgDrawableNormal);

    // 每多一种状态,在这里多加一项

    setBackgroundDrawable(bgDrawable);

    }

    @Override

    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {

    super.onLayout(changed, left, top, right, bottom);

    // layout之后必然会draw,所以在这里设置drawable的尺寸

    if (bgDrawableNormal != null) {

    bgDrawableNormal.setRect(right - left, bottom - top);

    }

    // 每多一种状态,在这里多加一项

    }

    }

    这就可以啦,我们看看效果:

    bf18a381b032

    round-corner-button-demo.png

    展开全文
  • android 自定义button 支持颜色,圆角,可以简单实现button颜色,圆角
  • 通过定义shape,selector资源实现圆角效果;或者通过自定义圆角按钮效果控件
  • 在做项目的时候要用到圆角按钮,并且点击按钮会有变色效果和Button里面的字体颜色变色的效果。 首先在res文件夹下建一个drawable文件夹,然后在该文件夹建一个shape的Android XML文件。 这是按钮没点击时的文件: ...
  • 自定义圆角button

    2017-06-28 14:21:02
    背景:安卓原生button太丑,产品...为了开发方便,写了一个自定义button。 该button可设置圆角半径,默认半圆。以及可设定按下效果颜色,大大减少了开发时间。 源码: 第一步:在values下创建attrs.xml文件(已存在则跳
  • Android 自定义Button按钮显示样式

    千次阅读 2021-05-26 06:51:58
    首先写一个定义Button样式的XML文件:新建Android XML文件,类型选Drawable,根结点选selector,文件名就buton_style吧我这里获取焦点跟点击时显示的是同一张图片,必须严格照上面的顺序写,不可倒。接下来只要在布局...
  • 但是,最近发现项目中res/drawable/下的shape标签文件越来越多,每当我们实现一些稍微不同的小需求时(例如圆角半径不同)就要新建一个shape标签的文件,这不仅很繁琐,还增加了内存、增加了apk的大小。 ...
  • 自定义Dialog
  • Android自定义纯色圆角按钮

    热门讨论 2015-01-15 18:02:13
    自定义纯色圆角按钮样式,不用图片也可以实现纯色按钮的效果!
  • 先上图在现实项目开发中,单纯的Button,EditText等控件远远不能满足我们项目的UI设计需求,这时候,我们就需要自己动手丰衣足食啦。接下来先给大家介绍一些属性,备注写的都非常清楚啦,我就不啰嗦啦。1 2 3 4 ...
  • 作者:金良(golden1314521@gmail.com) csdn博客:http://blog.csdn.net/u012176591 button的形状描述文件drawable/shape.xmlxmlns:android="http//schemas.android.com/apk/res/android"android:shape="oval">...
  • 在drawable 新建一个xml 文件 <?xml version="1.0" encoding="utf-8"?> ...selector xmlns:android="http://schemas.android.com/apk/res/android" >...item android:state_pressed="true"> <.
  • Android自定义圆角Span背景

    万次阅读 2016-12-06 21:14:58
    Android开发中,有时候需要对TextView中文字进行特殊化处理,例如给局部文字设置超链接、颜色、字体,背景色等。文主要讲了怎么自定义圆角背景Span,同时讲述了ReplacementSpan这个高度定式化的Span。
  • Android自定义圆角对话框
  • 我刚创建了一个自定义警报对话框.但它的角落不是圆的.首先创建一个布局为 –xmlns:tools=...
  • 前提:在开发中,我们会经常使用到按钮,而且大多数按钮的背景、圆角、按压效果等等都...目标:自定义一个button,所需要的圆角、背景颜色、字体颜色等属性,都是可配置的,还需要实现按压效果,不可用状态。动手实...
  • 1)自定义button样式一、采用图片方式首先新建Android XML文件,类型选Drawable,根结点选selector,自定义一个文件名。随后,开发环境自动在新建的文件里加了selector结点,我们只需要在selector结点里写上三种状态...
  • Android 自定义按钮button 加图片和两行文字 先上效果图 首先在drawable里建四个文件 1.button.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,654
精华内容 2,661
关键字:

android自定义圆角button