CustomKeyboardView.java 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package me.yoqi.android.safekeyboard.keyboard.view;
  2. import android.content.Context;
  3. import android.graphics.Canvas;
  4. import android.graphics.Color;
  5. import android.graphics.Paint;
  6. import android.graphics.Rect;
  7. import android.graphics.Typeface;
  8. import android.graphics.drawable.Drawable;
  9. import android.inputmethodservice.Keyboard;
  10. import android.inputmethodservice.KeyboardView;
  11. import android.util.AttributeSet;
  12. import java.lang.reflect.Field;
  13. import java.util.List;
  14. import me.yoqi.android.safekeyboard.R;
  15. import me.yoqi.android.safekeyboard.keyboard.KhKeyboardView;
  16. /** 自定义全键盘布局 继承系统的 KeyboardView
  17. * Created by liuyu1 on 2017/8/2.
  18. */
  19. public class CustomKeyboardView extends KeyboardView {
  20. private Context context;
  21. public CustomKeyboardView(Context context, AttributeSet attrs) {
  22. super(context, attrs);
  23. this.context = context;
  24. }
  25. /** 绘制一个键盘
  26. * @param canvas
  27. */
  28. @Override
  29. public void onDraw(Canvas canvas) {
  30. super.onDraw(canvas);
  31. try {
  32. List<Keyboard.Key> keys = getKeyboard().getKeys();
  33. for (Keyboard.Key key : keys) {
  34. if (key.codes[0] == -5) {
  35. Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.keyboard_word_del_layerlist);
  36. dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
  37. dr.draw(canvas);
  38. } else if (key.codes[0] == -35) {
  39. Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.keyboard_word_del_layerlist2);
  40. dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
  41. dr.draw(canvas);
  42. } else if (key.codes[0] == -1) {
  43. Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.keyboard_word_shift_layerlist);
  44. Drawable dr_da = (Drawable) context.getResources().getDrawable(R.drawable.keyboard_word_shift_layerlist_da);
  45. dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
  46. dr_da.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
  47. if (KhKeyboardView.isUpper) {
  48. dr_da.draw(canvas);
  49. } else {
  50. dr.draw(canvas);
  51. }
  52. } else if (key.codes[0] == -2 || key.codes[0] == 90001) {
  53. Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.keyboard_selector_blue_bg);
  54. dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
  55. dr.draw(canvas);
  56. drawText(canvas, key);
  57. } else {
  58. }
  59. }
  60. } catch (Exception e) {
  61. e.printStackTrace();
  62. }
  63. }
  64. private void drawText(Canvas canvas, Keyboard.Key key) {
  65. try {
  66. Rect bounds = new Rect(); //矩形
  67. Paint paint = new Paint();
  68. paint.setTextAlign(Paint.Align.CENTER);
  69. paint.setAntiAlias(true);
  70. paint.setColor(Color.WHITE);
  71. if (key.label != null) {
  72. String label = key.label.toString();
  73. Field field;
  74. if (label.length() > 1 && key.codes.length < 2) {
  75. int labelTextSize = 0;
  76. try {
  77. field = KeyboardView.class.getDeclaredField("mLabelTextSize");
  78. field.setAccessible(true);
  79. labelTextSize = (int) field.get(this);
  80. } catch (NoSuchFieldException e) {
  81. e.printStackTrace();
  82. } catch (IllegalAccessException e) {
  83. e.printStackTrace();
  84. }
  85. paint.setTextSize(labelTextSize);
  86. paint.setTypeface(Typeface.DEFAULT_BOLD);
  87. } else {
  88. int keyTextSize = 0;
  89. try {
  90. field = KeyboardView.class.getDeclaredField("mLabelTextSize");
  91. field.setAccessible(true);
  92. keyTextSize = (int) field.get(this);
  93. } catch (NoSuchFieldException e) {
  94. e.printStackTrace();
  95. } catch (IllegalAccessException e) {
  96. e.printStackTrace();
  97. }
  98. paint.setTextSize(keyTextSize);
  99. paint.setTypeface(Typeface.DEFAULT);
  100. }
  101. paint.getTextBounds(key.label.toString(), 0, key.label.toString()
  102. .length(), bounds);
  103. canvas.drawText(key.label.toString(), key.x + (key.width / 2),
  104. (key.y + key.height / 2) + bounds.height() / 2, paint);
  105. } else if (key.icon != null) {
  106. key.icon.setBounds(key.x + (key.width - key.icon.getIntrinsicWidth()) / 2, key.y + (key.height - key.icon.getIntrinsicHeight()) / 2,
  107. key.x + (key.width - key.icon.getIntrinsicWidth()) / 2 + key.icon.getIntrinsicWidth(), key.y + (key.height - key.icon.getIntrinsicHeight()) / 2 + key.icon.getIntrinsicHeight());
  108. key.icon.draw(canvas);
  109. }
  110. } catch (Exception e) {
  111. e.printStackTrace();
  112. }
  113. }
  114. }