CustomKeyboardView.java 5.2 KB

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