android keyboardview 清空,重写Keyboard
各键对应的编码绘制步骤1、写keyboard的xml文件android:horizontalGap="12dp"android:verticalGap="14dp"android:keyWidth="33.33333%p"android:keyHeight="8%p">android:codes="49"android:keyLabel="1">android:codes="50"an
各键对应的编码
绘制步骤1、写keyboard的xml文件<?xml version="1.0" encoding="utf-8"?>
android:horizontalGap="12dp"
android:verticalGap="14dp"
android:keyWidth="33.33333%p"
android:keyHeight="8%p">
android:codes="49"
android:keyLabel="1">
android:codes="50"
android:keyLabel="2">
android:codes="51"
android:keyLabel="3">
android:codes="52"
android:keyLabel="4">
android:codes="53"
android:keyLabel="5">
android:codes="54"
android:keyLabel="6">
android:codes="55"
android:keyLabel="7">
android:codes="56"
android:keyLabel="8">
android:codes="57"
android:keyLabel="9">
android:codes="48"
android:keyLabel="0">
android:codes="43"
android:keyLabel="+">
android:codes="45"
android:keyLabel="-">
android:codes="46"
android:keyLabel=".">
android:codes="-3"
android:keyLabel="C">
android:codes="-5"
android:isRepeatable="false"
android:keyIcon="@drawable/ic_calculator_delete"/>
2、重写 KeyboardViewpublic class NumKeyView extends KeyboardView implements KeyboardView.OnKeyboardActionListener { //用于区分左下角空白按键,(要与xml里设置的数值相同)
private int KEYCODE_EMPTY = -10; private Drawable mDeleteKeyDrawable; //删除按键背景图片
private int mKryboardBackgroud; private Drawable mKryDrawable; //按键背景
private int mPaddingLeft; private int mPaddingRight; private int mPaddingTop; private int mPaddingBottom; public NumKeyView(Context context, AttributeSet attrs) { super(context, attrs);
init(context, attrs, 0);
} public NumKeyView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr);
init(context, attrs, defStyleAttr);
} private void init(Context context, AttributeSet attrs, int defStyleAttr) {
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.NumKeyView);
mKryDrawable = ta.getDrawable(R.styleable.NumKeyView_keyBackgBackground);
mDeleteKeyDrawable = ta.getDrawable(R.styleable.NumKeyView_deleteDrawable); //删除按键颜色
mKryboardBackgroud = ta.getColor(R.styleable.NumKeyView_keyboardBackgBackground, Color.WHITE); //keyboard背景颜色
mPaddingLeft = (int) ta.getDimension(R.styleable.NumKeyView_leftPadding, 0);
mPaddingRight = (int) ta.getDimension(R.styleable.NumKeyView_rightPadding, 0);
mPaddingTop = (int) ta.getDimension(R.styleable.NumKeyView_topPadding, 0);
mPaddingBottom = (int) ta.getDimension(R.styleable.NumKeyView_bottomPadding, 0);
ta.recycle(); //获取xml中的按键布局
Keyboard keyboard = new Keyboard(context, R.xml.numkeyview);
setKeyboard(keyboard);
setEnabled(true);
setPreviewEnabled(false);
setOnKeyboardActionListener(this);
} @Override
public void onDraw(Canvas canvas) { super.onDraw(canvas);
canvas.drawColor(mKryboardBackgroud);
drawKeyboardBorder(canvas);
Keyboard keyboard = getKeyboard(); if (keyboard == null) return;
List keys = keyboard.getKeys(); if (keys != null && keys.size() > 0) {
Paint paint = new Paint();
paint.setTextAlign(Paint.Align.CENTER);
Typeface font = Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD);
paint.setTypeface(font);
paint.setAntiAlias(true); for (Keyboard.Key key : keys) { if (key.codes[0] == Keyboard.KEYCODE_DELETE) { //绘制删除键背景
drawKeyBackGround(key, canvas); //绘制按键图片
drawkeyDelete(key, canvas);
} else {
drawKeyBackGround(key, canvas);
} if (key.label != null) { if (key.codes[0] == Keyboard.KEYCODE_DELETE) {
} else {
paint.setColor(getContext().getResources().getColor(R.color.c000000));
paint.setTextSize(sp2px(25));
}
Rect rect = new Rect(key.x, key.y, key.x + key.width, key.y + key.height);
Paint.FontMetricsInt fontMetrics = paint.getFontMetricsInt(); int baseline = (rect.bottom + rect.top - fontMetrics.bottom - fontMetrics.top) / 2; // 下面这行是实现水平居中,drawText对应改为传入targetRect.centerX()
paint.setTextAlign(Paint.Align.CENTER);
canvas.drawText(key.label.toString(), rect.centerX(), baseline, paint);
}
}
}
} //绘制边框
private void drawKeyboardBorder(Canvas canvas) {
} //数字键
private void drawKeyBackGround(Keyboard.Key key, Canvas canvas) {
mKryDrawable.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
mKryDrawable.draw(canvas);
} //删除键
private void drawkeyDelete(Keyboard.Key key, Canvas canvas) { int drawWidth = key.width; int drawHeight = key.height;
drawWidth = drawWidth / 2;
drawHeight = drawHeight / 2; int widthInterval = (key.width - drawWidth) / 2; int heightInterval = (key.height - drawHeight) / 2;
mDeleteKeyDrawable.setBounds(key.x + widthInterval, key.y + heightInterval,
key.x + widthInterval + drawWidth, key.y + heightInterval + drawHeight);
mDeleteKeyDrawable.draw(canvas);
} //回调接口
public interface OnKeyPressListener { //添加数据回调
void onInertKey(String text); //删除数据回调
void onDeleteKey(); void onClearKey();
} private OnKeyPressListener mOnkeyPressListener; public void setOnKeyPressListener(OnKeyPressListener li) {
mOnkeyPressListener = li;
} @Override
public void onKey(int i, int[] ints) { if (i == Keyboard.KEYCODE_DELETE && mOnkeyPressListener != null) { //删除数据回调
mOnkeyPressListener.onDeleteKey();
} else if (i == Keyboard.KEYCODE_CANCEL && mOnkeyPressListener != null) { //清除数据
mOnkeyPressListener.onClearKey();
} else if (i != KEYCODE_EMPTY) { //添加数据回调
mOnkeyPressListener.onInertKey(Character.toString((char) i));
}
} @Override
public void onPress(int i) {
} @Override
public void onRelease(int i) {
} @Override
public void onText(CharSequence charSequence) {
} @Override
public void swipeRight() { super.swipeRight();
} @Override
public void swipeDown() { super.swipeDown();
} @Override
public void swipeLeft() { super.swipeLeft();
} @Override
public void swipeUp() { super.swipeUp();
} /*****************************************************************/
private int sp2px(float spValue) { final float fontScale = getContext().getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f);
}
}
3、Activity 中实现public class MainActivity extends AppCompatActivity { private EditText mEditText; private NumKeyView mKeyView; private LinearLayout mLinearlayout; private PopupWindow mPop; private View mPopView; private RelativeLayout mRelativeLayout; private Handler mhandler = new Handler() { @Override
public void handleMessage(Message msg) { super.handleMessage(msg);
mPop.dismiss();
mKeyView.setVisibility(View.VISIBLE);
;
}
}; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
mEditText = findViewById(R.id.et);
mLinearlayout = findViewById(R.id.ln);
mPop = new PopupWindow();
mPopView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.keyboard_pop, null);
mPop.setContentView(mPopView);
mPop.setTouchable(true);
mPop.setFocusable(true);
mPop.setBackgroundDrawable(new ColorDrawable());
mPop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
mPop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
mPop.setAnimationStyle(R.style.PopWindowstyle);
mKeyView = mPopView.findViewById(R.id.keyboardview);
mRelativeLayout = mPopView.findViewById(R.id.iv_hide);
mRelativeLayout.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
mPop.dismiss();
}
});
mEditText.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { int inputType = mEditText.getInputType();
mEditText.setInputType(InputType.TYPE_NULL);// 让系统键盘不弹出
//点击按钮显示键盘
mPop.showAtLocation(mLinearlayout, Gravity.BOTTOM, 0, 0);
mEditText.setInputType(inputType); //设定光标位置
Selection.setSelection(mEditText.getText(), mEditText.getText().length()); return false;
}
});
//设置回调,并进行文本的插入与删除
mKeyView.setOnKeyPressListener(new NumKeyView.OnKeyPressListener() { @Override
public void onInertKey(String text) {
mEditText.append(text);
} @Override
public void onDeleteKey() { int last = mEditText.getText().length(); if (last > 0) { //删除最后一位
mEditText.getText().delete(last - 1, last);
}
} @Override
public void onClearKey() {
mEditText.getText().clear();
}
});
}
}
5、keyboard_pop.xml<?xml version="1.0" encoding="utf-8"?>
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/c00000000"
android:orientation="vertical">
android:id="@+id/iv_hide"
android:layout_width="80dp"
android:layout_height="44dp"
android:layout_alignParentRight="true"
android:layout_marginRight="8dp"
android:background="@color/cE7EDF5">
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:class="lazyload" src="https://i-blog.csdnimg.cn/blog_migrate/e7eed6b9855ebeb16e66074cdaf9c0fa.png" data-original="@drawable/ic_calculator_up" />
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/iv_hide"
android:background="@color/cCDCDCD">
android:id="@+id/keyboardview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="17dp"
android:layout_marginTop="18dp"
android:layout_marginRight="17dp"
android:layout_marginBottom="20dp"
android:focusable="true"
android:focusableInTouchMode="true"
app:bottomPadding="20dp"
app:deleteDrawable="@drawable/ic_calculator_delete"
app:keyBackgBackground="@drawable/key_bg_view"
app:keyboardBackgBackground="@color/cCDCDCD" />
style文件//键盘属性
作者:涛涛123759
链接:https://www.jianshu.com/p/b899b8eb3055
更多推荐
所有评论(0)