package org.apelikecoder.bulgariankeyboard2; import android.content.Context; import android.content.res.Resources; import android.content.res.XmlResourceParser; import android.inputmethodservice.Keyboard; import android.util.Log; public class MyKeyboard extends LatinKeyboard { private static final String TAG_KEY = "Key"; public static final int NEXT_KEYBOARD = -12; private int extraheight; public MyKeyboard(Context context, int xmlLayoutResId, int mode, boolean showArrows) { super(context, xmlLayoutResId, mode); if (showArrows) { final Resources res = context.getResources(); for (Key k : getKeys()) { if ((k.edgeFlags & Keyboard.EDGE_BOTTOM) != 0) k.edgeFlags ^= Keyboard.EDGE_BOTTOM; } Row r = createRowFromXml(res, res.getXml(R.xml.arrows_row)); loadArrowRow(context, res.getXml(R.xml.arrows_row), r); } } private void loadArrowRow(Context context, XmlResourceParser parser, Row row) { boolean inKey = false; int x = 0; Key key = null; Resources res = context.getResources(); try { int event; while ((event = parser.next()) != XmlResourceParser.END_DOCUMENT) { if (event == XmlResourceParser.START_TAG) { String tag = parser.getName(); if (TAG_KEY.equals(tag)) { inKey = true; key = createKeyFromXml(res, row, x, super.getHeight(), parser); getKeys().add(key); } } else if (event == XmlResourceParser.END_TAG) { if (inKey) { inKey = false; x += key.gap + key.width; extraheight = Math.max(extraheight, key.height); } } } } catch (Exception e) { Log.e("XXXX", "Parse error:" + e); e.printStackTrace(); } } @Override public int getHeight() { return super.getHeight() + extraheight; } }