Android 自訂數字鍵台

來源:互聯網
上載者:User

標籤:android   自訂數字鍵台   

業務需求自訂數字鍵台,寫了一個demo

主要代碼:

import android.app.Activity;import android.content.Context;import android.graphics.drawable.ColorDrawable;import android.util.DisplayMetrics;import android.view.View;import android.view.WindowManager;import android.view.ViewGroup.LayoutParams;import android.widget.EditText;import android.widget.ImageView;import android.widget.PopupWindow;import com.example.caculater.PopupWindowUtil.OnPopuWindowListener;import com.example.caculaternumber.R;import com.lidroid.xutils.ViewUtils;import com.lidroid.xutils.view.annotation.ViewInject;import com.lidroid.xutils.view.annotation.event.OnClick;public class CaculaterPopuWindow{private static Activity mActivity;private static CaculaterPopuWindow mPopupWindow;private String phone="";@ViewInject(R.id.caculater_del)private ImageView caculaterdel;@ViewInject(R.id.caculater_p)private ImageView caculaterp;@ViewInject(R.id.caculater_0)private ImageView caculater0;@ViewInject(R.id.caculater_1)private ImageView caculater1;@ViewInject(R.id.caculater_2)private ImageView caculater2;@ViewInject(R.id.caculater_3)private ImageView caculater3;@ViewInject(R.id.caculater_4)private ImageView caculater4;@ViewInject(R.id.caculater_5)private ImageView caculater5;@ViewInject(R.id.caculater_6)private ImageView caculater6;@ViewInject(R.id.caculater_7)private ImageView caculater7;@ViewInject(R.id.caculater_8)private ImageView caculater8;@ViewInject(R.id.caculater_9)private ImageView caculater9;@ViewInject(R.id.editText)private EditText editText;private OnPopuWindowListener listener;private int mScreenWidth;private int mScreenHeight;public CaculaterPopuWindow(){}public static CaculaterPopuWindow getInstance(Activity activity){mActivity=activity;if(mPopupWindow==null){mPopupWindow=new CaculaterPopuWindow();}return mPopupWindow;}public PopupWindow onCreate(OnPopuWindowListener listener) {// TODO Auto-generated method stubthis.listener=listener;View view=mActivity.getLayoutInflater().inflate(R.layout.include_caculater, null);ViewUtils.inject(this, view);initScreen();int height=mScreenHeight/3;PopupWindow pw=new PopupWindow(view,LayoutParams.MATCH_PARENT,height);pw.setBackgroundDrawable(new ColorDrawable(0));pw.setOutsideTouchable(true);return pw;}@OnClick({R.id.caculater_0,R.id.caculater_1,R.id.caculater_2,R.id.caculater_3,R.id.caculater_4,R.id.caculater_5,R.id.caculater_6,R.id.caculater_7,R.id.caculater_8,R.id.caculater_9,R.id.caculater_p,R.id.caculater_del})private void clickMethod(View v){if(v==caculaterdel){listener.delete();}else{if(v==caculater0){phone="0";}else if(v==caculater1){phone="1";}else if(v==caculater2){phone="2";}else if(v==caculater3){phone="3";}else if(v==caculater4){phone="4";}else if(v==caculater5){phone="5";}else if(v==caculater6){phone="6";}else if(v==caculater7){phone="7";}else if(v==caculater8){phone="8";}else if(v==caculater9){phone="9";}else if(v==caculaterp){phone=".";}listener.addString(phone);}}public void initScreen(){WindowManager manager=(WindowManager)mActivity.getSystemService(Context.WINDOW_SERVICE);DisplayMetrics outMetrics=new DisplayMetrics();manager.getDefaultDisplay().getMetrics(outMetrics);mScreenWidth=outMetrics.widthPixels;mScreenHeight=outMetrics.heightPixels;}


import android.text.InputType;import android.view.MotionEvent;import android.view.View;import android.widget.EditText;import android.widget.PopupWindow;public class PopupWindowUtil implements android.view.View.OnTouchListener{private static PopupWindowUtil util;private EditText mEditText;private PopupWindow mPopuWindow;private OnPopuWindowListener listener;public PopupWindowUtil(){}public static PopupWindowUtil getInstance(){if(util==null){util=new PopupWindowUtil();}return util;}public void setOnTouchListener(EditText mEditText,PopupWindow mPopuWindow,OnPopuWindowListener listener){mEditText.setOnTouchListener(this);this.mEditText=mEditText;this.mPopuWindow=mPopuWindow;this.listener=listener;}@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubint inputType=mEditText.getInputType();mEditText.setInputType(InputType.TYPE_NULL);mEditText.setInputType(inputType);mEditText.setSelection(mEditText.getText().toString().trim().length());if(mPopuWindow!=null&&!mPopuWindow.isShowing()){listener.showPopuWindow();}return false;}public interface OnPopuWindowListener{void showPopuWindow();void dismiss();void addString(String str);void delete();}


import android.app.Activity;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.widget.EditText;import android.widget.PopupWindow;import com.example.caculater.PopupWindowUtil.OnPopuWindowListener;import com.lidroid.xutils.ViewUtils;public abstract class BaseActivity extends Activity implements OnPopuWindowListener{protected PopupWindow mPopupWindow;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(getCurrentView());ViewUtils.inject(this);initView();}public abstract int getCurrentView();public abstract void initView();public void initPopupWindow(){if(mPopupWindow==null){mPopupWindow=CaculaterPopuWindow.getInstance(this).onCreate(this);}}public void StartPopupWindow(View view){            if(mPopupWindow!=null&&!mPopupWindow.isShowing()){            mPopupWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0);            }}public void StopPopupWindow(){ if(mPopupWindow!=null&&mPopupWindow.isShowing()){         mPopupWindow.dismiss();         }}// 往文字框中新增內容public void addString(EditText editText,String sequence) {int index = getEditSelection(editText);// 游標的位置if (index < 0 || index >= getEditTextViewString(editText).length()) {editText.append(sequence);} else {editText.getEditableText().insert(index, sequence);// 游標所在位置插入文字}}// 擷取游標當前位置public int getEditSelection(EditText editText) {return editText.getSelectionStart();}// 擷取文字框的內容public String getEditTextViewString(EditText editText) {return editText.getText().toString();}// 清除文字框中的內容public void clearText(EditText editText) {editText.getText().clear();}// 刪除指定位置的字元public void deleteEditValue(EditText editText,int index) {editText.getText().delete(index - 1, index);}// 設定游標位置public void setEditSelectionLoc(EditText editText,int index) {editText.setSelection(index);}// 判斷是否是數字public static boolean isNum(String str) {return str.matches("([0-9]+)?)$");}public void showPopuWindow(){}public void dismiss(){}public void addString(String str){}public void delete(){}}

import android.widget.EditText;import android.widget.LinearLayout;import com.example.caculater.BaseActivity;import com.example.caculater.PopupWindowUtil;import com.lidroid.xutils.view.annotation.ViewInject;public class MainActivity extends BaseActivity {@ViewInject(R.id.editText)private EditText editText;@ViewInject(R.id.parent)private LinearLayout parent;@Overridepublic int getCurrentView() {// TODO Auto-generated method stubreturn R.layout.activity_main;}@Overridepublic void initView() {// TODO Auto-generated method stubinitPopupWindow();PopupWindowUtil.getInstance().setOnTouchListener(editText, mPopupWindow, this);}@Overridepublic void showPopuWindow() {// TODO Auto-generated method stubsuper.showPopuWindow();StartPopupWindow(parent);}@Overridepublic void dismiss() {// TODO Auto-generated method stubsuper.dismiss();StopPopupWindow();}@Overridepublic void delete() {// TODO Auto-generated method stubsuper.delete();if(editText.getText().toString().trim().length()>0){deleteEditValue(editText, getEditSelection(editText));}}@Overridepublic void addString(String str) {// TODO Auto-generated method stubsuper.addString(str);addString(editText, str);}}

基本代碼就這些,如果要求輸入密碼鍵盤(純數字),添加一個addString 參數的回調即可。隱藏系統鍵盤在高版本無法隱藏,最後換了一種思路,直接禁止了系統IME的彈出  InputType.TYPE_NULL  ,遺留問題:游標定位  OnTouchListener時將游標定位到處摸位置待解決

   

Android 自訂數字鍵台

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.