获取控件enable状态_Android自定义组合控件数字加减(适用于购物车)
大家好,我是小黑,一个还没秃头的程序员~~~
独学而无友,则孤陋而寡闻--《礼记·学记》
今天的内容是自定义一个数组加减的控件,可以应用于购物车的数量选择,效果如下:
自定义实现了控件的默认值、最大值、最小值、步长的值的设置
(一)设置控件布局view_number.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical"> <ImageView android:id="@+id/iv_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/icon_add_enable" /> <EditText android:id="@+id/edit_value" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:background="@drawable/frame_with_gray_edge_white" android:paddingLeft="15dp" android:paddingTop="10dp" android:paddingRight="15dp" android:paddingBottom="10dp" android:text="1" android:textColor="#000" android:textSize="14dp" /> <ImageView android:id="@+id/iv_minus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:background="@drawable/select_minus_switch" />LinearLayout>
按钮样式只实现了可不可点击状态的切换,大家也可自己实现单击状态的效果select_minus_switch.xml代码如下:
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@mipmap/icon_minus_disable" android:state_enabled="false" /> <item android:drawable="@mipmap/icon_minus_enable" android:state_enabled="true" />selector>
frame_with_gray_edge_white.xml代码如下:
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="5dp" /> <solid android:color="#fff" /> <stroke android:width="0.5dp" android:color="#c0c0c0" />shape>
(二)创建类并继承基本布局,加载视图,自定义属性设计获取以及使用自定义属性文件attrs_number_view.xml代码如下:
<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="NumberView"> <attr name="min" format="integer" /> <attr name="max" format="integer" /> <attr name="step" format="integer" /> <attr name="defaultValue" format="integer" /> declare-styleable>resources>
NumberView.java代码如下:
public class NumberView extends LinearLayout {
private ImageView mIvAdd;
private ImageView mIvMinus;
private EditText mEditValue;
private int mCurrentValue;//当前的数值
private OnValueChangeListener mOnValueChangeListener;//值发生变化时的回调
private int mMax;//最大值
private int mMin;//最小值
private int mStep;//步长
private int mDefaultValue;//默认值
public int getMax() {
return mMax;
}
public void setMax(int max) {
mMax = max;
}
public int getMin() {
return mMin;
}
public void setMin(int min) {
mMin = min;
}
public int getStep() {
return mStep;
}
public void setStep(int step) {
mStep = step;
}
public int getDefaultValue() {
return mDefaultValue;
}
public void setDefaultValue(int defaultValue) {
mCurrentValue = mDefaultValue = defaultValue;
updateText();
}
public int getCurrentValue() {
return mCurrentValue;
}
//手动设置值需要更新UI
public void setCurrentValue(int currentValue) {
mCurrentValue = currentValue;
updateText();
}
public NumberView(Context context) {
this(context, null, 0);
}
public NumberView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public NumberView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context);
getAttrs(context, attrs);
}
//获取自定义属性
private void getAttrs(Context context, AttributeSet attrs) {
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.NumberView);
mMax = typedArray.getInt(R.styleable.NumberView_max, 999999);
mMin = typedArray.getInt(R.styleable.NumberView_min, 0);
mStep = typedArray.getInt(R.styleable.NumberView_step, 1);
mDefaultValue = typedArray.getInt(R.styleable.NumberView_defaultValue, 1);
mCurrentValue = mDefaultValue;//当前值等于默认值
if (mCurrentValue == mMin) {//当前值为最小值时减号不能点击
mIvMinus.setEnabled(false);
} else {
mIvMinus.setEnabled(true);
}
}
//加载布局,定义控件以及设置监听
private void initView(Context context) {
View inflate = LayoutInflater.from(context).inflate(R.layout.view_number, this, false);
this.addView(inflate);
mIvAdd = inflate.findViewById(R.id.iv_add);
mIvMinus = inflate.findViewById(R.id.iv_minus);
mEditValue = inflate.findViewById(R.id.edit_value);
mIvAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//先加完再比较,只要一点加号,减号就可以点击了
mCurrentValue += mStep;
mIvMinus.setEnabled(true);
//为了防止超过最大值,最后一步将最大值设置成当前值
if (mCurrentValue >= mMax) {
mCurrentValue = mMax;
mIvAdd.setEnabled(false);
}
//更新UI
updateText();
//回调当前值
if (mOnValueChangeListener != null) {
mOnValueChangeListener.onValueChange(mCurrentValue);
}
}
});
mIvMinus.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//减号与加号同理
mCurrentValue -= mStep;
mIvAdd.setEnabled(true);
if (mCurrentValue <= mMin) {
mCurrentValue = mMin;
mIvMinus.setEnabled(false);
}
updateText();
if (mOnValueChangeListener != null) {
mOnValueChangeListener.onValueChange(mCurrentValue);
}
}
});
}
private void updateText() {
mEditValue.setText(mCurrentValue + "");
}
public interface OnValueChangeListener {
void onValueChange(int value);
}
public void setOnValueChangeListener(OnValueChangeListener onValueChangeListener) {
mOnValueChangeListener = onValueChangeListener;
}
在Activity中的控件使用:
NumberView numberView = findViewById(R.id.view_number);
numberView.setOnValueChangeListener(new NumberView.OnValueChangeListener() {
@Override
public void onValueChange(int value) {
Toast.makeText(NumberViewActivity.this, "The current value is :"+value, Toast.LENGTH_SHORT).show();
}
});
到此为止,一个关于数字加减选择的自定义控件就已经完成了,是不是很简单,注释也写得很清楚,大家也可以自己添加各种自定义属性,如数值的精度以及按钮的样式等等,最后,祝大家身体健康,万事如意,感谢大家的支持与阅读!
获取控件enable状态_Android自定义组合控件数字加减(适用于购物车)相关推荐
- Android View体系(十)自定义组合控件
相关文章 Android View体系(一)视图坐标系 Android View体系(二)实现View滑动的六种方法 Android View体系(三)属性动画 Android View体系(四)从源 ...
- 自定义组合控件:Banner、轮播图、广告栏控件
1. 项目概述 这里,我们使用自定义组合控件实现一个自动轮播的广告条,也叫轮播图,完整版的效果图如下图所示.其实,这就是我们经常见到的滚动广告,默认情况下每隔N 秒会自动滚动,用手指左右滑动时也会切换 ...
- Android 自定义组合控件小结
Android 自定义组合控件小结 引言 接触Android UI开发的这段时间以来,对自定义组合控件有了一定的了解,为此小结一下,本文小结内容主要讨论的是如何使用Android SDK提供的布局和控 ...
- Android 手机卫士--自定义组合控件构件布局结构
由于设置中心条目中的布局都很类似,所以可以考虑使用自定义组合控件来简化实现 本文地址:http://www.cnblogs.com/wuyudong/p/5909043.html,转载请注明源地址. ...
- 自定义组合控件:下拉选择框
Spinner 自定义组合控件之下拉选择框 项目概述 下拉选择框主要是通过在EditText 下用PopupWindow 动态显示ListView 控件来实现的.下拉选择框可以方便用户的输入效率,以此 ...
- Android自定义组合控件--EditText和Button组合成带有清空EditText内容功能的复合控件
目标:实现EditText和Button组合成带有清空EditText内容功能的复合控件,可以通过代码设置自定义控件的相关属性. 实现效果为: (1)在res/layout目录下编写自定义组合控件的布 ...
- Android自定义组合布局,Android 流式布局 + 自定义组合控件
自定义组合控件 package yanjupeng.bawei.com.day09.two; import android.content.Context; import android.util.A ...
- Android Studio自定义组合控件
在Android的开发中,为了能够服用代码,会把有一定共有特点的控件组合在一起定义成一个自定义组合控件. 本文就详细讲述这一过程.虽然这样的View的组合有一个粒度的问题.粒度太大了无法复用,粒度太 ...
- Android自定义View 自定义组合控件
自定义组合控件: 以三国杀游戏武将为例,包括武将头像,血条,装备区 1.先定义该组合的XML文件布局 1 <?xml version="1.0" encoding=" ...
最新文章
- 履带机器人运动控制器c++_敏捷得像猫,被抛出后能平稳着地,有意思的美国西点军校机器人!...
- 人脸特征值能存放在sql server中吗_钥匙丢了进不了门,Out了!只要自己没丢就能进门...
- php websocket 心跳包,websocket 心跳包重连
- oracle 创建视图时提示自定义的函数功能名不管用_PCS 7 CFC的常用功能与操作
- HTML阅读位置,script在HTML文档中位置
- 自训练:超越预训练,展现强大互补特性的上分新范式!
- DTO,VO,POJO,JavaBeans之间的区别?
- tar包zip的拆分与合并
- PAT1104 Sum of Number Segments精度问题
- Cesium笔记之加载GIF图
- 台式低速常温离心机S400操作规程
- 阿里云天池学习赛-零基础入门数据分析-学术前沿趋势分析(task1)
- 进阶高级自动化测试测试,Docker 常遇问题整理(带解决方案)
- python turtle怎么画海绵宝宝_画师绘制海绵宝宝性转拟人,派大星变小帅哥,又脑补一出甜蜜大戏...
- 「补课」进行时:设计模式(5)——从 LOL 中学习代理模式
- 校园超市购物系统(JAVA,JSP,SSM,MYSQL)
- 细粒度情感三元组抽取任务及其最新进展
- 游戏开发中的数据结构
- unity 代码热更+资源管理框架总结
- EVE-NG 透明模式 Transparent
热门文章
- zabbix server is not running the information displayed may not be current
- 深度解读 MongoDB 最全面的增强版本 4.4 新特性
- 五个问答,告诉你阿里云对象存储如何助力钉钉战胜业务洪峰
- Spotify如何使用Cassandra实现个性化推荐
- 哪种人是软件设计中的稀缺型人才?
- 如何在云上使用confd+ACM管理敏感数据
- 如何实现“持续集成”?闲鱼把研发效率翻了个翻
- 像数据科学家一样思考:12步指南(中)
- 阿里CTO:阿里所有技术和产品输出都将必须通过阿里云进行
- 到底什么成就了今天的人工智能?(上)