在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → android EditText加减demo

android EditText加减demo

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:0.97M
  • 下载次数:14
  • 浏览次数:299
  • 发布时间:2015-05-13
  • 实例类别:Android平台开发
  • 发 布 人:sunlicong
  • 文件格式:.rar
  • 所需积分:2
 相关标签: Android

实例介绍

【实例简介】

【实例截图】

【核心代码】

package com.and.android.demo.addandsubview;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;


/**
 * 
 * @author ZJJ
 *
 */
public class AddAndSubView extends LinearLayout
{
	Context context;
	LinearLayout mainLinearLayout;   //主View,即AddAndSubView
	LinearLayout leftLinearLayout;   //内部左view
	LinearLayout centerLinearLayout;   //中间view
	LinearLayout rightLinearLayout;  //内部右view
	OnNumChangeListener onNumChangeListener;
	Button addButton;
	Button subButton;
	EditText editText;
	int num;          //editText中的数值
	int editTextLayoutWidth;  //editText视图的宽度
	int editTextLayoutHeight;  //editText视图的宽度
	int editTextMinimumWidth;  //editText视图的最小宽度
	int editTextMinimumHeight;  //editText视图的最小高度
	int editTextMinHeight;  //editText文本区域的最小高度
	int editTextHeight;  //editText文本区域的高度
	

	public AddAndSubView(Context context)
	{
		super(context);
		this.context = context;
		num = 0;
		control();
	}

	/**
	 * 带初始数据实例化
	 * @param context
	 * @param 初始数据
	 */
	public AddAndSubView(Context context, int num)
	{
		super(context);
		this.context = context;
		this.num = num;
		control();
	}
	
	
	
	
	public AddAndSubView(Context context, AttributeSet attrs)
	{
		super(context, attrs);
		num = 0;
		control();
	}

	/**
	 * 
	 */
	private void control()
	{
		initTextWithHeight();
		initialise();          //实例化内部view
		setViewsLayoutParm();  //设置内部view的布局参数
		insertView();            //将子view放入linearlayout中
		setViewListener();
	}
	
	
	/**
	 * 初始化EditText宽高参数
	 */
	private void initTextWithHeight()
	{
		editTextLayoutWidth = -1;
		editTextLayoutHeight = -1;
		editTextMinimumWidth = -1;
		editTextMinimumHeight = -1;
		editTextMinHeight = -1;
		editTextHeight = -1;
	}
	
	
	/**
	 * 实例化内部View
	 */
	private void initialise()
	{
		mainLinearLayout = new LinearLayout(context);
		leftLinearLayout = new LinearLayout(context);
		centerLinearLayout = new LinearLayout(context);
		rightLinearLayout = new LinearLayout(context);
		addButton = new Button(context);
		subButton = new Button(context);
		editText = new EditText(context);
		
		addButton.setText(" ");
		subButton.setText("-");
		addButton.setTag(" ");
		subButton.setTag("-");
		//设置输入类型为数字
		editText.setInputType(android.text.InputType.TYPE_CLASS_NUMBER);
		editText.setText(String.valueOf(num));
	}
	
	/**
	 * 设置内部view的布局参数
	 */
	private void setViewsLayoutParm()
	{
		LayoutParams viewLayoutParams = new LayoutParams(
				LinearLayout.LayoutParams.WRAP_CONTENT, 
				LinearLayout.LayoutParams.WRAP_CONTENT);
		
		addButton.setLayoutParams(viewLayoutParams);
		subButton.setLayoutParams(viewLayoutParams);
		editText.setLayoutParams(viewLayoutParams);
		editText.setGravity(Gravity.CENTER);
		setTextWidthHeight();
		
		viewLayoutParams.gravity = Gravity.CENTER;
		centerLinearLayout.setLayoutParams(viewLayoutParams);
		//让editText不自动获得焦点
		centerLinearLayout.setFocusable(true);
		centerLinearLayout.setFocusableInTouchMode(true);
		
		viewLayoutParams.width = LinearLayout.LayoutParams.WRAP_CONTENT;
		viewLayoutParams.weight = 1.0f;
		leftLinearLayout.setLayoutParams(viewLayoutParams);  //参数:宽、高、比重,比重为1.0
		rightLinearLayout.setLayoutParams(viewLayoutParams);  //参数:宽、高、比重,比重为1.0
		
		viewLayoutParams.width = LinearLayout.LayoutParams.MATCH_PARENT;
		mainLinearLayout.setLayoutParams(viewLayoutParams);
		mainLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
	}
	
	
	/**
	 * 设置EditText视图和文本区域宽高
	 */
	private void setTextWidthHeight()
	{
		float fPx;
		
		//设置视图最小宽度
		if (editTextMinimumWidth < 0)
		{
			// 将数据从dip(即dp)转换到px,第一参数为数据原单位(此为DIP),第二参数为要转换的数据值
			fPx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
					80f, context.getResources().getDisplayMetrics());
			editTextMinimumWidth = Math.round(fPx);
		}
		editText.setMinimumWidth(editTextMinimumWidth);
		
		//设置文本区域高度
		if (editTextHeight > 0)
		{
			if (editTextMinHeight >= 0 && editTextMinHeight > editTextHeight)
			{
				editTextHeight = editTextMinHeight;
			}
			editText.setHeight(editTextHeight);
		}
		
		//设置视图高度
		if (editTextLayoutHeight > 0)
		{
			if (editTextMinimumHeight > 0  && 
					editTextMinimumHeight > editTextLayoutHeight)
			{
				editTextLayoutHeight = editTextMinimumHeight;
			}
			
			LayoutParams layoutParams = (LayoutParams) editText.getLayoutParams();
			layoutParams.height = editTextLayoutHeight;
			editText.setLayoutParams(layoutParams);
		}
		
		//设置视图宽度
		if (editTextLayoutWidth > 0)
		{
			if (editTextMinimumWidth > 0  && 
					editTextMinimumWidth > editTextLayoutWidth)
			{
				editTextLayoutWidth = editTextMinimumWidth;
			}
			
			LayoutParams layoutParams = (LayoutParams) editText.getLayoutParams();
			layoutParams.width = editTextLayoutWidth;
			editText.setLayoutParams(layoutParams);
		}
	}
	
	/**
	 * 将子view放入linearlayout中
	 */
	private void insertView()
	{
		mainLinearLayout.addView(leftLinearLayout, 0);
		mainLinearLayout.addView(centerLinearLayout, 1);
		mainLinearLayout.addView(rightLinearLayout, 2);
		
		leftLinearLayout.addView(addButton);
		centerLinearLayout.addView(editText);
		rightLinearLayout.addView(subButton);

		addView(mainLinearLayout);  //将整块视图添加进当前AddAndSubView中
	}

	/**
	 * 设置editText中的值
	 * @param num
	 */
	public void setNum(int num)
	{
		this.num = num;
		editText.setText(String.valueOf(num));
	}
	
	/**
	 * 获取editText中的值
	 * @return
	 */
	public int getNum()
	{
		if ( editText.getText().toString() != null )
		{
			return Integer.parseInt(editText.getText().toString());
		}
		else {
			return 0;
		}
	}

	
	/**
	 * 设置EditText视图的最小高度
	 * @param minimumWidth EditText的最小高度,单位px
	 */
	public void setEditTextMinimumWidth(int editTextMinimumWidth)
	{
		//设置视图最小宽度
		if (editTextMinimumWidth > 0)
		{
			this.editTextMinimumWidth = editTextMinimumWidth;
			editText.setMinimumWidth(editTextMinimumWidth);
		}
		
	}

	/**
	 * 设置EditText视图的最小高度
	 * @param editTextMinimumHeight EditText视图的最小高度,单位:px
	 */
	public void setEditTextMinimumHeight(int editTextMinimumHeight)
	{
		//设置视图最小高度
		if (editTextMinimumHeight > 0)
		{
			this.editTextMinimumHeight = editTextMinimumHeight;
			editText.setMinimumHeight(editTextMinimumHeight);
		}
	}

	/**
	 * 设置EditText文本区域的最小高度
	 * @param editTextMinHeight EditText文本区域的最小高度,单位:px
	 */
	public void setEditTextMinHeight(int editTextMinHeight)
	{
		//设置文本区域最小高度
		if (editTextMinHeight > 0)
		{
			this.editTextMinHeight = editTextMinHeight;
			editText.setMinHeight(editTextMinHeight);
		}
	}

	/**
	 * 设置EditText文本区域的高度
	 * @param editTextHeight EditText文本区域的高度,单位:px
	 */
	public void setEditTextHeight(int editTextHeight)
	{
		this.editTextHeight = editTextHeight;
		setTextWidthHeight();
	}

	/**
	 * 设置EditText视图的宽度
	 * @param editTextLayoutWidth 设置EditText视图的宽度,单位px
	 */
	public void setEditTextLayoutWidth(int editTextLayoutWidth)
	{
		this.editTextLayoutWidth = editTextLayoutWidth;
		setTextWidthHeight();
	}

	/**
	 * 设置EditText视图的高度
	 * @param editTextLayoutHeight EditText视图的最小高度,单位px
	 */
	public void setEditTextLayoutHeight(int editTextLayoutHeight)
	{
		this.editTextLayoutHeight = editTextLayoutHeight;
		setTextWidthHeight();
	}

	/**
	 * 以Drawable形式 设置按钮背景图
	 * @param addBtnDrawable 加号背景图
	 * @param subBtnDrawable 减号背景图
	 */
	public void Drawable(Drawable addBtnDrawable, Drawable subBtnDrawable)
	{
		//不推荐用setBackgroundDrawable,新API推荐用setBackground(在API 16中)
		addButton.setBackgroundDrawable(addBtnDrawable);
		subButton.setBackgroundDrawable(subBtnDrawable);
		addButton.setText("");
		subButton.setText("");
	}
	
	/**
	 * 以资源Resource形式 设置按钮背景图
	 * @param addBtnResource 加号背景图
	 * @param subBtnResource 减号背景图
	 */
	public void setButtonBgResource(int addBtnResource, int subBtnResource)
	{
		addButton.setBackgroundResource(addBtnResource);
		subButton.setBackgroundResource(subBtnResource);
		addButton.setText("");
		subButton.setText("");
	}
	
	/**
	 * 设置按钮背景色
	 * @param addBtnColor 加号背景色
	 * @param subBtnColor 减号背景色
	 */
	public void setButtonBgColor(int addBtnColor, int subBtnColor)
	{
		addButton.setBackgroundColor(addBtnColor);
		subButton.setBackgroundColor(subBtnColor);
	}
	
	/**
	 * 设置EditText文本变化监听
	 * @param onNumChangeListener
	 */
	public void setOnNumChangeListener(OnNumChangeListener onNumChangeListener)
	{
		this.onNumChangeListener = onNumChangeListener;
	}
	
	
	/**
	 * 设置文本变化相关监听事件
	 */
	private void setViewListener()
	{
		addButton.setOnClickListener(new OnButtonClickListener());
		subButton.setOnClickListener(new OnButtonClickListener());
		editText.addTextChangedListener(new OnTextChangeListener());
	}
	
	
	/**
	 * 加减按钮事件监听器
	 * @author ZJJ
	 *
	 */
	class OnButtonClickListener implements OnClickListener
	{

		@Override
		public void onClick(View v)
		{
			String numString = editText.getText().toString();
			if (numString == null || numString.equals(""))
			{
				num = 0;
				editText.setText("0");
			} else
			{
				if (v.getTag().equals(" "))
				{
					if (  num < 0)  //先加,再判断
					{
						num--;
						Toast.makeText(context, "请输入一个大于0的数字",
								Toast.LENGTH_SHORT).show();
					} else
					{
						editText.setText(String.valueOf(num));
						
						if (onNumChangeListener != null)
						{
							onNumChangeListener.onNumChange(AddAndSubView.this, num);
						}
					}
				} else if (v.getTag().equals("-"))
				{
					if (--num < 0)  //先减,再判断
					{
						num  ;
						Toast.makeText(context, "请输入一个大于0的数字",
								Toast.LENGTH_SHORT).show();
					} else
					{
						editText.setText(String.valueOf(num));
						if (onNumChangeListener != null)
						{
							onNumChangeListener.onNumChange(AddAndSubView.this, num);
						}
					}
				}
			}
		}
	}
	
	
	/**
	 * EditText输入变化事件监听器
	 * @author ZJJ
	 *
	 */
	class OnTextChangeListener implements TextWatcher
	{

		@Override
		public void afterTextChanged(Editable s)
		{
			String numString = s.toString();
			if(numString == null || numString.equals(""))
			{
				num = 0;
				if (onNumChangeListener != null)
				{
					onNumChangeListener.onNumChange(AddAndSubView.this, num);
				}
			}
			else {
				int numInt = Integer.parseInt(numString);
				if (numInt < 0)
				{
					Toast.makeText(context, "请输入一个大于0的数字",
							Toast.LENGTH_SHORT).show();
				} else
				{
					//设置EditText光标位置 为文本末端
					editText.setSelection(editText.getText().toString().length());
					num = numInt;
					if (onNumChangeListener != null)
					{
						onNumChangeListener.onNumChange(AddAndSubView.this, num);
					}
				}
			}
		}

		@Override
		public void beforeTextChanged(CharSequence s, int start, int count,
				int after)
		{

		}

		@Override
		public void onTextChanged(CharSequence s, int start, int before,
				int count)
		{
			
		}
		
	}
	
	
	public interface OnNumChangeListener
	{
		/**
		 * 输入框中的数值改变事件
		 * @param view 整个AddAndSubView
		 * @param num 输入框的数值
		 */
		public void onNumChange(View view, int num);
	}
	
}

标签: Android

实例下载地址

android EditText加减demo

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警