Android自定义spinner

本文介绍了如何在Android中自定义Spinner控件,包括自定义属性的定义、自定义类的编写,以及如何在布局中使用自定义Spinner,并展示了相关的布局文件。详细解释了自定义属性的获取和自定义控件的绘制过程。
摘要由CSDN通过智能技术生成

重温Android自定义控件,选择自定义一个类spinner,别眨眼:

先来看看效果




一:首先是自定义属性

1.在res/values下创建一个attrs.xml文件,在里面定义属性

2.文件如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="CustomSpinner">                                               
        <attr name="defaultShowItem" format="integer"/>                                    <!-- 默认展示第几条 -->
        <attr name="CustomSpinnerBackground" format="reference|color"/> <!-- 自定义spinner的背景,引用或者颜色类型,就是说可以用R.drawable.xxxx也可以用#aaff0000 -->
        <attr name="CustomSpinnerTextColor" format="reference|color"/>      <!-- 自定义spinner的item字体颜色 -->
        <attr name="CustomSpinnerTextSize" format="dimension"/>                <!-- 自定义spinner的item的字体大小 -->
        <attr name="HaveLeftIcon" format="boolean"/>                                        <!-- 是否需要左图标 -->
        <!-- <attr name="LeftIconImage" format="reference"/> -->                      <!-- 左图标图片 -->
        <attr name="LeftIconWidth" format="dimension"/>                                  <!-- 左图标的宽 -->
        <attr name="LeftIconHeight" format="dimension"/>                                 <!-- 左图标的高 -->
        <attr name="LeftIconMarginLeft" format="dimension"/>                          <!-- 左图标距左边的空间 -->
        <attr name="android:layout_width"/>           <!-- 当我们也需要设置控件的宽高的时候,通常会使用layout_width属性,这是系统自带的,但是系统并没有提供android.R.styleable.xxxxx的形式让我们获取系统属性的值,那么这个时候就要用这样的方式来设置了,这种方式可以和系统属性一样设置layout_width,没有区别 -->
        <attr name="android:layout_height"/>                                                          <!-- 与系统一致 -->
        </declare-styleable>    
</resources>

二:自定义spinner类,使用注释详解了

package com.jeska.mvpdemo.customview;
import com.jeska.mvpdemo.R;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;

public class CustomSpinner extends View {
    /**
     * 是否已经设置了内容
     * */
    private boolean haveSetContent = false;
    /**
     * 密度
     * */
    private float density;
    /**
     * 当前显示的内容
     * */
    private String currentContent = "";
    private Context mContext;
    /**
     * 公用画笔
     * */
    private Paint mPaint = null;
    /**
     * items的展示文字
     * */
    private String[] texts = null;
    /**
     * 左图标的图片集合
     * */
    private int[] leftIconImages = null;
    /**
     * 控件的高

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值