Android自定义按钮功能的一种实现思路

来源:互联网 发布:mac专柜口红价格多少啊 编辑:程序博客网 时间:2024/05/22 03:12

最近看到一个小工具,可以实现自定义按钮功能,觉得挺有趣的,于是就思考了下实现思路。


现在想到的一种思路是:

1.所有功能对应一个int型数值标记

2.用一个map来把按钮的标示和按钮当前的功能联系起来,功能与1里面给出的对应

3.点击按钮时,根据按钮标示取得对应的功能数值,然后去执行相应的function


一个简单的例子:

public class OnMainButtonClickListener implements OnClickListener {public static enum enumFuncTag {func_new, func_help,func_reserved};// 保存btn和func的对应关系private Map<Integer, enumFuncTag> mBtnFuncMap = new HashMap<Integer, enumFuncTag>();public OnMainButtonClickListener(Button[] btns) {// 设置默认对应关系for (int j = 0; j < btns.length; j++) {mBtnFuncMap.put(btns[j].getId(), enumFuncTag.func_reserved);}}// 设置对应关系public void setBtnFunc(int btnID, enumFuncTag funcTag) {mBtnFuncMap.put(btnID, funcTag);}// 获取对应关系public enumFuncTag getFuncByBtnID(int btnID) {return mBtnFuncMap.get(btnID);}// 这里有一个map 用于btn和function对应  map有init、set、get// click里先取v.id,然后id去map里找对应func标记// 然后switch执行func@Overridepublic void onClick(View v) {// 根据id获取对应funcint btnID = v.getId();enumFuncTag funcTag = getFuncByBtnID(btnID);LLog.LogI("btnID:"+btnID);LLog.LogI("funcTag:"+funcTag);switch (funcTag) {case func_new:newFile();break;case func_help:help();break;default:reservedFunc();break;}}// func列表public void newFile() {LLog.LogD("newFile");}public void help() {LLog.LogD("help");}public void reservedFunc() {LLog.LogD("reservedFunc");}}


调用:

<span style="white-space:pre"></span>private Button[] mButtons = new Button[3];private OnMainButtonClickListener mBtnClickListener = null;

mButtons[0] = (Button)findViewById(R.id.btn_main_lt);mButtons[1] = (Button)findViewById(R.id.btn_main_ct);mButtons[2] = (Button)findViewById(R.id.btn_main_rt);if (mBtnClickListener == null) {mBtnClickListener = new OnMainButtonClickListener(mButtons);}for (int i = 0; i < mButtons.length; i++) {mButtons[i].setOnClickListener(mBtnClickListener);}mBtnClickListener.setBtnFunc(mButtons[0].getId(), OnMainButtonClickListener.enumFuncTag.func_new);mBtnClickListener.setBtnFunc(mButtons[1].getId(), OnMainButtonClickListener.enumFuncTag.func_help);





0 0
原创粉丝点击