在开发股票App的时候可能会被要求使用股票键盘,前一阵从不炒股得人第一次听说了股票键盘,后来查阅了一下,其实就是自定义的键盘,奈何一只搜索股票键盘,难住了我,所以我写了一个股票键盘。
话不多说直接上马了:
首先要先写一个布局(就是在要显示键盘的类的布局里):
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignParentBottom="true"
- >
- <android.inputmethodservice.KeyboardView
- android:id="@+id/hot_keyboard_view"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="@android:color/black"
- android:focusable="true"
- android:focusableInTouchMode="true"
- android:keyTextColor="@color/white"
- android:keyPreviewLayout="@layout/key_preview_layout"
-
- />
- </RelativeLayout>
其中
KeyboardView键盘的控件。接下来写一个键盘类:
- import android.app.Activity;
- import android.content.Context;
- import android.inputmethodservice.Keyboard;
- import android.inputmethodservice.KeyboardView;
- import android.text.Editable;
- import android.view.View;
- import android.widget.EditText;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.RelativeLayout;
-
- import java.util.List;
-
- import cn.uniwa.uniwa.R;
-
- public class KeyBoardNumber {
- private KeyboardView keyboardView;
- private Keyboard k1;// 英文键盘
- private Keyboard k2;// 数字键盘
- private EditText ed;
- boolean b = true;
- Activity a;//接收传过来Activity
- LinearLayout ll;
- ImageView hotIvDel;
- LinearLayout hotLlResult;
- RelativeLayout hotRlNoFind;
-
- public KeyBoardNumber(Activity act, Context ctx, EditText edit) {//Activity可以将使用到此键盘的类传过来,也可以删除不传
- this.ed = edit;
- a = act;
- k1 = new Keyboard(ctx, R.xml.letter);
- k2 = new Keyboard(ctx, R.xml.symbols);
- keyboardView = (KeyboardView) act.findViewById(R.id.hot_keyboard_view);
- keyboardView.setKeyboard(k2);
- //软键盘是否启用
- keyboardView.setEnabled(true);
- //按键提示是否启用
- keyboardView.setPreviewEnabled(false);
-
- keyboardView.setOnKeyboardActionListener(listener);
- List<Keyboard.Key> keylist = k1.getKeys();
-
- for (Keyboard.Key key : keylist) {
- if (key.label != null && isword(key.label.toString())) {
- key.label = key.label.toString().toUpperCase();
- key.codes[0] = key.codes[0] - 32;
- }
- }
- }
-
- private KeyboardView.OnKeyboardActionListener listener = new KeyboardView.OnKeyboardActionListener() {
- @Override
- public void swipeUp() {
- }
-
- @Override
- public void swipeRight() {
- }
-
- @Override
- public void swipeLeft() {
- }
-
- @Override
- public void swipeDown() {
- }
-
- @Override
- public void onText(CharSequence text) {
- }
-
- @Override
- public void onRelease(int primaryCode) {
- }
-
- @Override
- public void onPress(int primaryCode) {
- }
-
- @Override
- public void onKey(int primaryCode, int[] keyCodes) {//注意!设置的键盘按钮可以再此方法内设置
- ll = (LinearLayout) a.findViewById(R.id.hot_ll_text);
- Editable editable = ed.getText();
- int start = ed.getSelectionStart();
- if (primaryCode == Keyboard.KEYCODE_CANCEL) {// 完成
- // Toast.makeText(KeyBoardNumber.this,"ok+"+editable,Toast.LENGTH_LONG).show();
- // hideKeyboard();
- } else if (primaryCode == Keyboard.KEYCODE_DELETE) {// 回退
- if (editable != null && editable.length() > 0) {
- if (start > 0) {
- editable.delete(start - 1, start);
- // hotIvDel.setVisibility(View.GONE);
- // hotLlResult.setVisibility(View.GONE);
- // ll.setVisibility(View.VISIBLE);
- // hotRlNoFind.setVisibility(View.GONE);
- }
- }
- } else if (primaryCode == -15) {
- EditText ed = (EditText) a.findViewById(R.id.hot_et_search);//这些方法用不到可以删除,这是从使用键盘的activity传来的id
- hotLlResult = (LinearLayout) a.findViewById(R.id.hot_ll_result);
- hotRlNoFind = (RelativeLayout) a.findViewById(R.id.hot_rl_noFind);
- String text = ed.getText().toString();
- if (text.equals("")||text == null){
- hotIvDel.setVisibility(View.GONE);
- hotLlResult.setVisibility(View.GONE);
- ll.setVisibility(View.VISIBLE);
- hotRlNoFind.setVisibility(View.GONE);
- }
- hideKeyboard();
- // ll.setVisibility(View.VISIBLE);
- // ed.setText("");
- } else if (primaryCode == 4896) {// 清空
- editable.clear();
- } else if (primaryCode == 002) {
- editable.insert(start, "002");
-
- } else if (primaryCode == 300) {
- editable.insert(start, "300");
-
- } else if (primaryCode == 600) {
- editable.insert(start, "600");
-
- } else if (primaryCode == 601) {
- editable.insert(start, "601");
-
- } else if (primaryCode == 000) {
- editable.insert(start, "000");
-
- } else if (primaryCode == 115) {
- editable.insert(start, "S");
- } else if (primaryCode == 8016) {
- // editable.insert(start, "16");
- if (b) {
- keyboardView.setKeyboard(k1);
- b = false;
- } else {
- keyboardView.setKeyboard(k2);
- b = true;
- }
-
- } else {
- editable.insert(start, Character.toString((char) primaryCode));
- }
- }
- };
-
- public boolean isKeyBoardShow() {
- int visibility = keyboardView.getVisibility();
- if (visibility == View.GONE || visibility == View.INVISIBLE) {
- return false;
- } else {
- return true;
- }
-
- }
-
- public void showKeyboard() {
- int visibility = keyboardView.getVisibility();
- if (visibility == View.GONE || visibility == View.INVISIBLE) {
- keyboardView.setVisibility(View.VISIBLE);
- }
- }
-
- //隐藏键盘
- public void hideKeyboard() {
- int visibility = keyboardView.getVisibility();
- if (visibility == View.VISIBLE) {
- keyboardView.setVisibility(View.INVISIBLE);
- }
- }
-
- private boolean isword(String str) {
- String wordstr = "abcdefghijklmnopqrstuvwxyz";
- if (wordstr.indexOf(str.toLowerCase()) > -1) {
- return true;
- }
- return false;
- }
注意看我写的注释应该就能明白了
接下来是英文键盘:
- <?xml version="1.0" encoding="utf-8"?>
- <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
- android:keyWidth="10%p" android:horizontalGap="0px"
- android:verticalGap="0px" android:keyHeight="8%p">
- <Row>
- <Key android:codes="113" android:keyEdgeFlags="left" android:keyLabel="Q"/>
- <Key android:codes="119" android:keyLabel="W"/>
- <Key android:codes="101" android:keyLabel="E"/>
- <Key android:codes="114" android:keyLabel="R"/>
- <Key android:codes="116" android:keyLabel="T"/>
- <Key android:codes="121" android:keyLabel="Y"/>
- <Key android:codes="117" android:keyLabel="U"/>
- <Key android:codes="105" android:keyLabel="I"/>
- <Key android:codes="111" android:keyLabel="O"/>
- <Key android:codes="112" android:keyEdgeFlags="right" android:keyLabel="P"/>
- </Row>
- <Row>
- <Key android:codes="97" android:horizontalGap="4.999995%p" android:keyEdgeFlags="left" android:keyLabel="A"/>
- <Key android:codes="115" android:keyLabel="S"/>
- <Key android:codes="100" android:keyLabel="D"/>
- <Key android:codes="102" android:keyLabel="F"/>
- <Key android:codes="103" android:keyLabel="G"/>
- <Key android:codes="104" android:keyLabel="H"/>
- <Key android:codes="106" android:keyLabel="J"/>
- <Key android:codes="107" android:keyLabel="K"/>
- <Key android:codes="108" android:keyEdgeFlags="right" android:keyLabel="L"/>
-
- </Row>
- <Row>
- <Key android:codes="122" android:horizontalGap="2%p" android:keyEdgeFlags="left" android:keyLabel="Z"/>
- <Key android:codes="120" android:keyLabel="X"/>
- <Key android:codes="99" android:keyLabel="C"/>
- <Key android:codes="118" android:keyLabel="V"/>
- <Key android:codes="98" android:keyLabel="B"/>
- <Key android:codes="110" android:keyLabel="N"/>
- <Key android:codes="109" android:keyLabel="M"/>
- <Key android:codes="-5"
- android:isRepeatable="true"
- android:keyEdgeFlags="right"
- android:keyIcon="@drawable/sym_keyboard_delete"
- android:keyWidth= "25%p"/>
- </Row>
- <Row>
- <Key android:codes="8016"
- android:keyLabel="123"
- android:keyEdgeFlags="left"
- android:keyWidth= "25%p"/>
- <Key android:codes="4896"
- android:isRepeatable="true"
- android:keyWidth= "25%p"
- android:keyLabel="@string/key_clear" />
- <Key android:codes="-15"
- android:isRepeatable="true"
- android:keyWidth= "25%p"
- android:keyLabel="隐藏" />
- <Key android:codes="-3"
- android:isRepeatable="true"
- android:keyEdgeFlags="right"
- android:keyLabel="@string/key_ok"
- android:keyWidth= "25%p" />
-
- </Row>
- </Keyboard>
数字键盘:
- <?xml version="1.0" encoding="utf-8"?>
- <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
- android:keyWidth="20%p" android:horizontalGap="0px"
- android:verticalGap="0px" android:keyHeight="8%p"
- >
- <Row>
- <Key android:codes="600" android:keyLabel="600" />
- <Key android:codes="49" android:keyLabel="1" />
- <Key android:codes="50" android:keyLabel="2" />
- <Key android:codes="51" android:keyLabel="3" />
- <Key android:codes="-5" android:isRepeatable="true"
- android:keyIcon="@drawable/sym_keyboard_delete" />
-
- </Row>
- <Row>
- <Key android:codes="601" android:keyLabel="601" />
- <Key android:codes="52" android:keyLabel="4" />
- <Key android:codes="53" android:keyLabel="5" />
- <Key android:codes="54" android:keyLabel="6" />
- <Key android:codes="4896" android:keyLabel="@string/key_clear" />
-
- </Row>
- <Row>
- <Key android:codes="000" android:keyLabel="000" />
- <Key android:codes="55" android:keyLabel="7" />
- <Key android:codes="56" android:keyLabel="8" />
- <Key android:codes="57" android:keyLabel="9" />
- <Key android:codes="-15" android:isRepeatable="true"
- android:keyLabel="隐藏" />
- </Row>
- <Row>
- <Key android:codes="8016" android:keyLabel="ABC" />
- <Key android:codes="002" android:keyLabel="002" />
- <Key android:codes="48" android:keyLabel="0" />
- <Key android:codes="300" android:keyLabel="300" />
- <Key android:codes="-3" android:isRepeatable="true"
- android:keyEdgeFlags="right"
- android:keyLabel="@string/key_ok"/>
- </Row>
- </Keyboard>
两个键盘内的功能键的codes都是重复的,可以进行数字英文进行切换
以上键盘设置完毕,只要在Activity中使用即可:
private KeyBoardNumber keyBoard;
keyBoard = new KeyBoardNumber(act, mContext, hotEtSearch);
hotEtSearch.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { int inputback = hotEtSearch.getInputType();// hotEtSearch.setInputType(InputType.TYPE_NULL); keyBoard.showKeyboard(); hotEtSearch.setInputType(inputback); return false; } });
这样就会显示键盘了;
但还是要注意,键盘布局的显示和隐藏;
如果有问题可以私聊我,会尽力帮忙。。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。