Android自定义spinner

重温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;
    /**
     * 控件的高

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android中,自定义`Spinner`视图通常涉及到创建一个自定义适配器(Adapter),以控制弹出选项列表的样式和内容。以下是如何实现这一步骤的: 1. **创建自定义Adapter**[^1] 首先,创建一个继承自`ArrayAdapter`或`BaseAdapter`的类,比如`CarBrandAdapter`,并重写关键方法如`getView()`来设置每个选项的显示内容和外观。 ```java public class CarBrandAdapter extends ArrayAdapter<String> { private final Context context; private final String[] carBrands; public CarBrandAdapter(Context context, int resource, String[] objects) { super(context, resource, objects); this.context = context; this.carBrands = objects; } @Override public View getView(int position, View convertView, ViewGroup parent) { // 如果convertView为空,创建一个新的View if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(context); convertView = inflater.inflate(R.layout.custom_spinner_item, parent, false); } // 获取并设置Spinner项的内容 TextView textView = convertView.findViewById(R.id.spinner_text); textView.setText(carBrands[position]); // 其他可能的定制,如设置背景颜色或图标 return convertView; } } ``` 2. **在布局文件中设置Spinner** 在XML布局文件中,添加一个`Spinner`组件,并指定其宽度和高度为`wrap_content`,这样它会根据内容自动调整大小。还要设置`adapter`属性,指向自定义的适配器实例。 ```xml <Spinner android:id="@+id/carBrandSpinner" android:layout_width="wrap_content" android:layout_height="wrap_content" android:entries="@array/car_brands_array" android:spinnerMode="dropdown" android:popupBackground="@drawable/custom_popup_background" /> ``` 其中,`@array/car_brands_array`是资源数组,包含你的选项数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值