🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#文件创建 ##创建自定义文件 说明:当系统的控件不满足需求时,自行定义控件,设置所要的控件效果 步骤 : File -> UI Component --> Custom View 示例代码: 1. ChangeColorIconWithText.java文件 ~~~ package com.sowsceo.www.customizecontrol; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.drawable.Drawable; import android.text.TextPaint; import android.util.AttributeSet; import android.view.View; import com.sowsceo.www.suityou.R; /** * TODO: document your custom view class. */ public class ChangeColorIconWithText extends View { private String mExampleString; // TODO: use a default from R.string... private int mExampleColor = Color.RED; // TODO: use a default from R.color... private float mExampleDimension = 0; // TODO: use a default from R.dimen... private Drawable mExampleDrawable; private TextPaint mTextPaint; private float mTextWidth; private float mTextHeight; public ChangeColorIconWithText(Context context) { super(context); init(null, 0); // this(context,null); } public ChangeColorIconWithText(Context context, AttributeSet attrs) { super(context, attrs); init(attrs, 0); //this(context,attrs,0); } /** * 获取自定义属性的值 * * @param context * @param attrs * @param defStyle */ public ChangeColorIconWithText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(attrs, defStyle); } private void init(AttributeSet attrs, int defStyle) { // Load attributes final TypedArray a = getContext().obtainStyledAttributes( attrs, R.styleable.ChangeColorIconWithText, defStyle, 0); mExampleString = a.getString( R.styleable.ChangeColorIconWithText_exampleString); mExampleColor = a.getColor( R.styleable.ChangeColorIconWithText_exampleColor, mExampleColor); // Use getDimensionPixelSize or getDimensionPixelOffset when dealing with // values that should fall on pixel boundaries. mExampleDimension = a.getDimension( R.styleable.ChangeColorIconWithText_exampleDimension, mExampleDimension); if (a.hasValue(R.styleable.ChangeColorIconWithText_exampleDrawable)) { mExampleDrawable = a.getDrawable( R.styleable.ChangeColorIconWithText_exampleDrawable); mExampleDrawable.setCallback(this); } a.recycle(); // Set up a default TextPaint object mTextPaint = new TextPaint(); mTextPaint.setFlags(Paint.ANTI_ALIAS_FLAG); mTextPaint.setTextAlign(Paint.Align.LEFT); // Update TextPaint and text measurements from attributes invalidateTextPaintAndMeasurements(); } private void invalidateTextPaintAndMeasurements() { mTextPaint.setTextSize(mExampleDimension); mTextPaint.setColor(mExampleColor); mTextWidth = mTextPaint.measureText(mExampleString); Paint.FontMetrics fontMetrics = mTextPaint.getFontMetrics(); mTextHeight = fontMetrics.bottom; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // TODO: consider storing these as member variables to reduce // allocations per draw cycle. int paddingLeft = getPaddingLeft(); int paddingTop = getPaddingTop(); int paddingRight = getPaddingRight(); int paddingBottom = getPaddingBottom(); int contentWidth = getWidth() - paddingLeft - paddingRight; int contentHeight = getHeight() - paddingTop - paddingBottom; // Draw the text. canvas.drawText(mExampleString, paddingLeft + (contentWidth - mTextWidth) / 2, paddingTop + (contentHeight + mTextHeight) / 2, mTextPaint); // Draw the example drawable on top of the text. if (mExampleDrawable != null) { mExampleDrawable.setBounds(paddingLeft, paddingTop, paddingLeft + contentWidth, paddingTop + contentHeight); mExampleDrawable.draw(canvas); } } /** * Gets the example string attribute value. * * @return The example string attribute value. */ public String getExampleString() { return mExampleString; } /** * Sets the view's example string attribute value. In the example view, this string * is the text to draw. * * @param exampleString The example string attribute value to use. */ public void setExampleString(String exampleString) { mExampleString = exampleString; invalidateTextPaintAndMeasurements(); } /** * Gets the example color attribute value. * * @return The example color attribute value. */ public int getExampleColor() { return mExampleColor; } /** * Sets the view's example color attribute value. In the example view, this color * is the font color. * * @param exampleColor The example color attribute value to use. */ public void setExampleColor(int exampleColor) { mExampleColor = exampleColor; invalidateTextPaintAndMeasurements(); } /** * Gets the example dimension attribute value. * * @return The example dimension attribute value. */ public float getExampleDimension() { return mExampleDimension; } /** * Sets the view's example dimension attribute value. In the example view, this dimension * is the font size. * * @param exampleDimension The example dimension attribute value to use. */ public void setExampleDimension(float exampleDimension) { mExampleDimension = exampleDimension; invalidateTextPaintAndMeasurements(); } /** * Gets the example drawable attribute value. * * @return The example drawable attribute value. */ public Drawable getExampleDrawable() { return mExampleDrawable; } /** * Sets the view's example drawable attribute value. In the example view, this drawable is * drawn above the text. * * @param exampleDrawable The example drawable attribute value to use. */ public void setExampleDrawable(Drawable exampleDrawable) { mExampleDrawable = exampleDrawable; } } ~~~ 2. sample_change_color_icon_with_text.xml 文件 注意: 需要编写命名空间 写法: xmlns:app="http://schemas.android.com/apk/自己定义的完整包名" 示例: xmlns:app="http://schemas.android.com/apk/com.sowsceo.www.customizecontrol" ~~~ <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/com.sowsceo.www.customizecontrol" android:layout_width="match_parent" android:layout_height="match_parent"> <com.sowsceo.www.customizecontrol.ChangeColorIconWithText android:layout_width="300dp" android:layout_height="300dp" android:background="#ccc" android:paddingBottom="40dp" android:paddingLeft="20dp" app:exampleColor="#33b5e5" app:exampleDimension="24sp" app:exampleDrawable="@android:drawable/ic_menu_add" app:exampleString="Hello, ChangeColorIconWithText" /> </FrameLayout> ~~~