Loading java/res/xml/kbd_rows_russian.xml +1 −2 Original line number Diff line number Diff line Loading @@ -29,8 +29,7 @@ <Key latin:keyLabel="й" latin:keyHintLabel="1" latin:moreKeys="1" latin:keyWidth="8.75%p" /> latin:moreKeys="1" /> <Key latin:keyLabel="ц" latin:keyHintLabel="2" Loading java/res/xml/kbd_rows_scandinavian.xml +3 −4 Original line number Diff line number Diff line Loading @@ -24,13 +24,12 @@ <include latin:keyboardLayout="@xml/kbd_key_styles" /> <Row latin:keyWidth="9.09%p" latin:keyWidth="9.091%p" > <Key latin:keyLabel="q" latin:keyHintLabel="1" latin:moreKeys="@string/more_keys_for_q" latin:keyWidth="8.75%p" /> latin:moreKeys="@string/more_keys_for_q" /> <Key latin:keyLabel="w" latin:keyHintLabel="2" Loading Loading @@ -72,7 +71,7 @@ latin:keyWidth="fillRight" /> </Row> <Row latin:keyWidth="9.09%p" latin:keyWidth="9.091%p" > <Key latin:keyLabel="a" Loading java/res/xml/kbd_rows_serbian.xml +5 −4 Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ <include latin:keyboardLayout="@xml/kbd_key_styles" /> <Row latin:keyWidth="9.09%p" latin:keyWidth="9.091%p" > <Key latin:keyLabel="љ" Loading Loading @@ -71,7 +71,7 @@ latin:keyWidth="fillRight" /> </Row> <Row latin:keyWidth="9.09%p" latin:keyWidth="9.091%p" > <Key latin:keyLabel="а" /> Loading @@ -98,10 +98,11 @@ latin:keyWidth="fillRight" /> </Row> <Row latin:keyWidth="8.90%p" latin:keyWidth="8.5%p" > <Key latin:keyStyle="shiftKeyStyle" /> latin:keyStyle="shiftKeyStyle" latin:keyWidth="11.75%p" /> <Key latin:keyLabel="ѕ" /> <Key Loading java/src/com/android/inputmethod/keyboard/Key.java +101 −112 Original line number Diff line number Diff line Loading @@ -253,25 +253,19 @@ public class Key { final TypedArray keyboardAttr = res.obtainAttributes(Xml.asAttributeSet(parser), R.styleable.Keyboard); int keyWidth; try { mHeight = KeyboardBuilder.getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_rowHeight, params.mHeight, row.mRowHeight) - params.mVerticalGap; mHorizontalGap = KeyboardBuilder.getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_horizontalGap, params.mWidth, params.mHorizontalGap); mHeight = (int)KeyboardBuilder.getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_rowHeight, params.mHeight, row.mRowHeight) - params.mVerticalGap; final float horizontalGap = KeyboardBuilder.getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_horizontalGap, params.mWidth, params.mHorizontalGap); mVerticalGap = params.mVerticalGap; keyWidth = KeyboardBuilder.getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_keyWidth, params.mWidth, row.mDefaultKeyWidth); } finally { float keyWidth = KeyboardBuilder.getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_keyWidth, params.mWidth, row.mDefaultKeyWidth); keyboardAttr.recycle(); } final TypedArray keyAttr = res.obtainAttributes(Xml.asAttributeSet(parser), R.styleable.Keyboard_Key); try { final KeyStyle style; if (keyAttr.hasValue(R.styleable.Keyboard_Key_keyStyle)) { String styleName = keyAttr.getString(R.styleable.Keyboard_Key_keyStyle); Loading @@ -283,11 +277,11 @@ public class Key { } final int keyboardWidth = params.mOccupiedWidth; final int x = row.mCurrentX; int keyXPos = KeyboardBuilder.getDimensionOrFraction(keyAttr, final float x = row.mCurrentX; float keyXPos = KeyboardBuilder.getDimensionOrFraction(keyAttr, R.styleable.Keyboard_Key_keyXPos, keyboardWidth, x); if (keyXPos < 0) { // If keyXPos is negative, the actual x-coordinate will be k + keyXPos. // If keyXPos is negative, the actual x-coordinate will be keyboardWidth + keyXPos. keyXPos += keyboardWidth; if (keyXPos < x) { // keyXPos shouldn't be less than x because drawable area for this key starts Loading @@ -308,26 +302,24 @@ public class Key { } // Horizontal gap is divided equally to both sides of the key. mX = keyXPos + mHorizontalGap / 2; mX = (int) (keyXPos + horizontalGap / 2); mY = row.mCurrentY; mWidth = keyWidth - mHorizontalGap; // Update row to have x-coordinate of the right edge of this key. mWidth = (int) (keyWidth - horizontalGap); mHorizontalGap = (int) horizontalGap; // Update row to have current x coordinate. row.mCurrentX = keyXPos + keyWidth; final CharSequence[] moreKeys = style.getTextArray( keyAttr, R.styleable.Keyboard_Key_moreKeys); final CharSequence[] moreKeys = style.getTextArray(keyAttr, R.styleable.Keyboard_Key_moreKeys); // In Arabic symbol layouts, we'd like to keep digits in more keys regardless of // config_digit_more_keys_enabled. if (params.mId.isAlphabetKeyboard() && !res.getBoolean( R.bool.config_digit_more_keys_enabled)) { mMoreKeys = MoreKeySpecParser.filterOut( res, moreKeys, MoreKeySpecParser.DIGIT_FILTER); if (params.mId.isAlphabetKeyboard() && !res.getBoolean(R.bool.config_digit_more_keys_enabled)) { mMoreKeys = MoreKeySpecParser.filterOut(res, moreKeys, MoreKeySpecParser.DIGIT_FILTER); } else { mMoreKeys = moreKeys; } mMaxMoreKeysColumn = style.getInt(keyboardAttr, R.styleable.Keyboard_Key_maxMoreKeysColumn, mMaxMoreKeysColumn = style.getInt(keyboardAttr, R.styleable.Keyboard_Key_maxMoreKeysColumn, params.mMaxMiniKeyboardColumn); mRepeatable = style.getBoolean(keyAttr, R.styleable.Keyboard_Key_isRepeatable, false); Loading @@ -337,15 +329,13 @@ public class Key { mEdgeFlags = 0; final KeyboardIconsSet iconsSet = params.mIconsSet; mVisualInsetsLeft = KeyboardBuilder.getDimensionOrFraction(keyAttr, mVisualInsetsLeft = (int) KeyboardBuilder.getDimensionOrFraction(keyAttr, R.styleable.Keyboard_Key_visualInsetsLeft, keyboardWidth, 0); mVisualInsetsRight = KeyboardBuilder.getDimensionOrFraction(keyAttr, mVisualInsetsRight = (int) KeyboardBuilder.getDimensionOrFraction(keyAttr, R.styleable.Keyboard_Key_visualInsetsRight, keyboardWidth, 0); mPreviewIcon = iconsSet.getIcon(style.getInt( keyAttr, R.styleable.Keyboard_Key_keyIconPreview, KeyboardIconsSet.ICON_UNDEFINED)); mIcon = iconsSet.getIcon(style.getInt( keyAttr, R.styleable.Keyboard_Key_keyIcon, mPreviewIcon = iconsSet.getIcon(style.getInt(keyAttr, R.styleable.Keyboard_Key_keyIconPreview, KeyboardIconsSet.ICON_UNDEFINED)); mIcon = iconsSet.getIcon(style.getInt(keyAttr, R.styleable.Keyboard_Key_keyIcon, KeyboardIconsSet.ICON_UNDEFINED)); final int shiftedIconId = style.getInt(keyAttr, R.styleable.Keyboard_Key_keyIconShifted, KeyboardIconsSet.ICON_UNDEFINED); Loading @@ -370,10 +360,9 @@ public class Key { } else { mCode = Keyboard.CODE_DUMMY; } } finally { keyAttr.recycle(); } } public void addEdgeFlags(int flags) { mEdgeFlags |= flags; Loading java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java +17 −18 Original line number Diff line number Diff line Loading @@ -218,14 +218,14 @@ public class KeyboardBuilder<KP extends KeyboardParams> { final int displayHeight = mDisplayMetrics.heightPixels; final int keyboardHeight = (int)keyboardAttr.getDimension( R.styleable.Keyboard_keyboardHeight, displayHeight / 2); final int maxKeyboardHeight = getDimensionOrFraction(keyboardAttr, final int maxKeyboardHeight = (int)getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_maxKeyboardHeight, displayHeight, displayHeight / 2); int minKeyboardHeight = getDimensionOrFraction(keyboardAttr, int minKeyboardHeight = (int)getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_minKeyboardHeight, displayHeight, displayHeight / 2); if (minKeyboardHeight < 0) { // Specified fraction was negative, so it should be calculated against display // width. minKeyboardHeight = -getDimensionOrFraction(keyboardAttr, minKeyboardHeight = -(int)getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_minKeyboardHeight, displayWidth, displayWidth / 2); } // Keyboard height will not exceed maxKeyboardHeight and will not be less than Loading @@ -233,9 +233,9 @@ public class KeyboardBuilder<KP extends KeyboardParams> { mParams.mOccupiedHeight = Math.max( Math.min(keyboardHeight, maxKeyboardHeight), minKeyboardHeight); mParams.mOccupiedWidth = mParams.mId.mWidth; mParams.mTopPadding = getDimensionOrFraction(keyboardAttr, mParams.mTopPadding = (int)getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_keyboardTopPadding, mParams.mOccupiedHeight, 0); mParams.mBottomPadding = getDimensionOrFraction(keyboardAttr, mParams.mBottomPadding = (int)getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_keyboardBottomPadding, mParams.mOccupiedHeight, 0); final int height = mParams.mOccupiedHeight; Loading @@ -243,13 +243,13 @@ public class KeyboardBuilder<KP extends KeyboardParams> { - mParams.mHorizontalCenterPadding; mParams.mHeight = height; mParams.mWidth = width; mParams.mDefaultKeyWidth = getDimensionOrFraction(keyboardAttr, mParams.mDefaultKeyWidth = (int)getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_keyWidth, width, width / 10); mParams.mDefaultRowHeight = getDimensionOrFraction(keyboardAttr, mParams.mDefaultRowHeight = (int)getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_rowHeight, height, height / 4); mParams.mHorizontalGap = getDimensionOrFraction(keyboardAttr, mParams.mHorizontalGap = (int)getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_horizontalGap, width, 0); mParams.mVerticalGap = getDimensionOrFraction(keyboardAttr, mParams.mVerticalGap = (int)getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_verticalGap, height, 0); mParams.mIsRtlKeyboard = keyboardAttr.getBoolean( Loading Loading @@ -384,13 +384,13 @@ public class KeyboardBuilder<KP extends KeyboardParams> { if (keyboardAttr.hasValue(R.styleable.Keyboard_horizontalGap)) throw new IllegalAttribute(parser, "horizontalGap"); final int keyboardWidth = mParams.mWidth; final int keyWidth = getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_keyWidth, keyboardWidth, row.mDefaultKeyWidth); final float keyWidth = getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_keyWidth, keyboardWidth, row.mDefaultKeyWidth); keyboardAttr.recycle(); final TypedArray keyAttr = mResources.obtainAttributes(Xml.asAttributeSet(parser), R.styleable.Keyboard_Key); int keyXPos = KeyboardBuilder.getDimensionOrFraction(keyAttr, float keyXPos = getDimensionOrFraction(keyAttr, R.styleable.Keyboard_Key_keyXPos, keyboardWidth, row.mCurrentX); if (keyXPos < 0) { // If keyXPos is negative, the actual x-coordinate will be display_width + keyXPos. Loading Loading @@ -688,24 +688,23 @@ public class KeyboardBuilder<KP extends KeyboardParams> { private void endKeyboard() { } private void setSpacer(int keyXPos, int width, Row row) { private void setSpacer(float keyXPos, float width, Row row) { row.mCurrentX = keyXPos + width; mLeftEdge = false; mRightEdgeKey = null; } public static int getDimensionOrFraction(TypedArray a, int index, int base, int defValue) { public static float getDimensionOrFraction(TypedArray a, int index, int base, float defValue) { final TypedValue value = a.peekValue(index); if (value == null) return defValue; if (isFractionValue(value)) { // Round it to avoid values like 47.9999 from getting truncated return Math.round(a.getFraction(index, base, base, defValue)); return a.getFraction(index, base, base, defValue); } else if (isDimensionValue(value)) { return a.getDimensionPixelOffset(index, defValue); return a.getDimension(index, defValue); } else if (isIntegerValue(value)) { // For enum value. return a.getInt(index, defValue); return a.getInt(index, 0); } return defValue; } Loading Loading
java/res/xml/kbd_rows_russian.xml +1 −2 Original line number Diff line number Diff line Loading @@ -29,8 +29,7 @@ <Key latin:keyLabel="й" latin:keyHintLabel="1" latin:moreKeys="1" latin:keyWidth="8.75%p" /> latin:moreKeys="1" /> <Key latin:keyLabel="ц" latin:keyHintLabel="2" Loading
java/res/xml/kbd_rows_scandinavian.xml +3 −4 Original line number Diff line number Diff line Loading @@ -24,13 +24,12 @@ <include latin:keyboardLayout="@xml/kbd_key_styles" /> <Row latin:keyWidth="9.09%p" latin:keyWidth="9.091%p" > <Key latin:keyLabel="q" latin:keyHintLabel="1" latin:moreKeys="@string/more_keys_for_q" latin:keyWidth="8.75%p" /> latin:moreKeys="@string/more_keys_for_q" /> <Key latin:keyLabel="w" latin:keyHintLabel="2" Loading Loading @@ -72,7 +71,7 @@ latin:keyWidth="fillRight" /> </Row> <Row latin:keyWidth="9.09%p" latin:keyWidth="9.091%p" > <Key latin:keyLabel="a" Loading
java/res/xml/kbd_rows_serbian.xml +5 −4 Original line number Diff line number Diff line Loading @@ -24,7 +24,7 @@ <include latin:keyboardLayout="@xml/kbd_key_styles" /> <Row latin:keyWidth="9.09%p" latin:keyWidth="9.091%p" > <Key latin:keyLabel="љ" Loading Loading @@ -71,7 +71,7 @@ latin:keyWidth="fillRight" /> </Row> <Row latin:keyWidth="9.09%p" latin:keyWidth="9.091%p" > <Key latin:keyLabel="а" /> Loading @@ -98,10 +98,11 @@ latin:keyWidth="fillRight" /> </Row> <Row latin:keyWidth="8.90%p" latin:keyWidth="8.5%p" > <Key latin:keyStyle="shiftKeyStyle" /> latin:keyStyle="shiftKeyStyle" latin:keyWidth="11.75%p" /> <Key latin:keyLabel="ѕ" /> <Key Loading
java/src/com/android/inputmethod/keyboard/Key.java +101 −112 Original line number Diff line number Diff line Loading @@ -253,25 +253,19 @@ public class Key { final TypedArray keyboardAttr = res.obtainAttributes(Xml.asAttributeSet(parser), R.styleable.Keyboard); int keyWidth; try { mHeight = KeyboardBuilder.getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_rowHeight, params.mHeight, row.mRowHeight) - params.mVerticalGap; mHorizontalGap = KeyboardBuilder.getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_horizontalGap, params.mWidth, params.mHorizontalGap); mHeight = (int)KeyboardBuilder.getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_rowHeight, params.mHeight, row.mRowHeight) - params.mVerticalGap; final float horizontalGap = KeyboardBuilder.getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_horizontalGap, params.mWidth, params.mHorizontalGap); mVerticalGap = params.mVerticalGap; keyWidth = KeyboardBuilder.getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_keyWidth, params.mWidth, row.mDefaultKeyWidth); } finally { float keyWidth = KeyboardBuilder.getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_keyWidth, params.mWidth, row.mDefaultKeyWidth); keyboardAttr.recycle(); } final TypedArray keyAttr = res.obtainAttributes(Xml.asAttributeSet(parser), R.styleable.Keyboard_Key); try { final KeyStyle style; if (keyAttr.hasValue(R.styleable.Keyboard_Key_keyStyle)) { String styleName = keyAttr.getString(R.styleable.Keyboard_Key_keyStyle); Loading @@ -283,11 +277,11 @@ public class Key { } final int keyboardWidth = params.mOccupiedWidth; final int x = row.mCurrentX; int keyXPos = KeyboardBuilder.getDimensionOrFraction(keyAttr, final float x = row.mCurrentX; float keyXPos = KeyboardBuilder.getDimensionOrFraction(keyAttr, R.styleable.Keyboard_Key_keyXPos, keyboardWidth, x); if (keyXPos < 0) { // If keyXPos is negative, the actual x-coordinate will be k + keyXPos. // If keyXPos is negative, the actual x-coordinate will be keyboardWidth + keyXPos. keyXPos += keyboardWidth; if (keyXPos < x) { // keyXPos shouldn't be less than x because drawable area for this key starts Loading @@ -308,26 +302,24 @@ public class Key { } // Horizontal gap is divided equally to both sides of the key. mX = keyXPos + mHorizontalGap / 2; mX = (int) (keyXPos + horizontalGap / 2); mY = row.mCurrentY; mWidth = keyWidth - mHorizontalGap; // Update row to have x-coordinate of the right edge of this key. mWidth = (int) (keyWidth - horizontalGap); mHorizontalGap = (int) horizontalGap; // Update row to have current x coordinate. row.mCurrentX = keyXPos + keyWidth; final CharSequence[] moreKeys = style.getTextArray( keyAttr, R.styleable.Keyboard_Key_moreKeys); final CharSequence[] moreKeys = style.getTextArray(keyAttr, R.styleable.Keyboard_Key_moreKeys); // In Arabic symbol layouts, we'd like to keep digits in more keys regardless of // config_digit_more_keys_enabled. if (params.mId.isAlphabetKeyboard() && !res.getBoolean( R.bool.config_digit_more_keys_enabled)) { mMoreKeys = MoreKeySpecParser.filterOut( res, moreKeys, MoreKeySpecParser.DIGIT_FILTER); if (params.mId.isAlphabetKeyboard() && !res.getBoolean(R.bool.config_digit_more_keys_enabled)) { mMoreKeys = MoreKeySpecParser.filterOut(res, moreKeys, MoreKeySpecParser.DIGIT_FILTER); } else { mMoreKeys = moreKeys; } mMaxMoreKeysColumn = style.getInt(keyboardAttr, R.styleable.Keyboard_Key_maxMoreKeysColumn, mMaxMoreKeysColumn = style.getInt(keyboardAttr, R.styleable.Keyboard_Key_maxMoreKeysColumn, params.mMaxMiniKeyboardColumn); mRepeatable = style.getBoolean(keyAttr, R.styleable.Keyboard_Key_isRepeatable, false); Loading @@ -337,15 +329,13 @@ public class Key { mEdgeFlags = 0; final KeyboardIconsSet iconsSet = params.mIconsSet; mVisualInsetsLeft = KeyboardBuilder.getDimensionOrFraction(keyAttr, mVisualInsetsLeft = (int) KeyboardBuilder.getDimensionOrFraction(keyAttr, R.styleable.Keyboard_Key_visualInsetsLeft, keyboardWidth, 0); mVisualInsetsRight = KeyboardBuilder.getDimensionOrFraction(keyAttr, mVisualInsetsRight = (int) KeyboardBuilder.getDimensionOrFraction(keyAttr, R.styleable.Keyboard_Key_visualInsetsRight, keyboardWidth, 0); mPreviewIcon = iconsSet.getIcon(style.getInt( keyAttr, R.styleable.Keyboard_Key_keyIconPreview, KeyboardIconsSet.ICON_UNDEFINED)); mIcon = iconsSet.getIcon(style.getInt( keyAttr, R.styleable.Keyboard_Key_keyIcon, mPreviewIcon = iconsSet.getIcon(style.getInt(keyAttr, R.styleable.Keyboard_Key_keyIconPreview, KeyboardIconsSet.ICON_UNDEFINED)); mIcon = iconsSet.getIcon(style.getInt(keyAttr, R.styleable.Keyboard_Key_keyIcon, KeyboardIconsSet.ICON_UNDEFINED)); final int shiftedIconId = style.getInt(keyAttr, R.styleable.Keyboard_Key_keyIconShifted, KeyboardIconsSet.ICON_UNDEFINED); Loading @@ -370,10 +360,9 @@ public class Key { } else { mCode = Keyboard.CODE_DUMMY; } } finally { keyAttr.recycle(); } } public void addEdgeFlags(int flags) { mEdgeFlags |= flags; Loading
java/src/com/android/inputmethod/keyboard/internal/KeyboardBuilder.java +17 −18 Original line number Diff line number Diff line Loading @@ -218,14 +218,14 @@ public class KeyboardBuilder<KP extends KeyboardParams> { final int displayHeight = mDisplayMetrics.heightPixels; final int keyboardHeight = (int)keyboardAttr.getDimension( R.styleable.Keyboard_keyboardHeight, displayHeight / 2); final int maxKeyboardHeight = getDimensionOrFraction(keyboardAttr, final int maxKeyboardHeight = (int)getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_maxKeyboardHeight, displayHeight, displayHeight / 2); int minKeyboardHeight = getDimensionOrFraction(keyboardAttr, int minKeyboardHeight = (int)getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_minKeyboardHeight, displayHeight, displayHeight / 2); if (minKeyboardHeight < 0) { // Specified fraction was negative, so it should be calculated against display // width. minKeyboardHeight = -getDimensionOrFraction(keyboardAttr, minKeyboardHeight = -(int)getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_minKeyboardHeight, displayWidth, displayWidth / 2); } // Keyboard height will not exceed maxKeyboardHeight and will not be less than Loading @@ -233,9 +233,9 @@ public class KeyboardBuilder<KP extends KeyboardParams> { mParams.mOccupiedHeight = Math.max( Math.min(keyboardHeight, maxKeyboardHeight), minKeyboardHeight); mParams.mOccupiedWidth = mParams.mId.mWidth; mParams.mTopPadding = getDimensionOrFraction(keyboardAttr, mParams.mTopPadding = (int)getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_keyboardTopPadding, mParams.mOccupiedHeight, 0); mParams.mBottomPadding = getDimensionOrFraction(keyboardAttr, mParams.mBottomPadding = (int)getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_keyboardBottomPadding, mParams.mOccupiedHeight, 0); final int height = mParams.mOccupiedHeight; Loading @@ -243,13 +243,13 @@ public class KeyboardBuilder<KP extends KeyboardParams> { - mParams.mHorizontalCenterPadding; mParams.mHeight = height; mParams.mWidth = width; mParams.mDefaultKeyWidth = getDimensionOrFraction(keyboardAttr, mParams.mDefaultKeyWidth = (int)getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_keyWidth, width, width / 10); mParams.mDefaultRowHeight = getDimensionOrFraction(keyboardAttr, mParams.mDefaultRowHeight = (int)getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_rowHeight, height, height / 4); mParams.mHorizontalGap = getDimensionOrFraction(keyboardAttr, mParams.mHorizontalGap = (int)getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_horizontalGap, width, 0); mParams.mVerticalGap = getDimensionOrFraction(keyboardAttr, mParams.mVerticalGap = (int)getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_verticalGap, height, 0); mParams.mIsRtlKeyboard = keyboardAttr.getBoolean( Loading Loading @@ -384,13 +384,13 @@ public class KeyboardBuilder<KP extends KeyboardParams> { if (keyboardAttr.hasValue(R.styleable.Keyboard_horizontalGap)) throw new IllegalAttribute(parser, "horizontalGap"); final int keyboardWidth = mParams.mWidth; final int keyWidth = getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_keyWidth, keyboardWidth, row.mDefaultKeyWidth); final float keyWidth = getDimensionOrFraction(keyboardAttr, R.styleable.Keyboard_keyWidth, keyboardWidth, row.mDefaultKeyWidth); keyboardAttr.recycle(); final TypedArray keyAttr = mResources.obtainAttributes(Xml.asAttributeSet(parser), R.styleable.Keyboard_Key); int keyXPos = KeyboardBuilder.getDimensionOrFraction(keyAttr, float keyXPos = getDimensionOrFraction(keyAttr, R.styleable.Keyboard_Key_keyXPos, keyboardWidth, row.mCurrentX); if (keyXPos < 0) { // If keyXPos is negative, the actual x-coordinate will be display_width + keyXPos. Loading Loading @@ -688,24 +688,23 @@ public class KeyboardBuilder<KP extends KeyboardParams> { private void endKeyboard() { } private void setSpacer(int keyXPos, int width, Row row) { private void setSpacer(float keyXPos, float width, Row row) { row.mCurrentX = keyXPos + width; mLeftEdge = false; mRightEdgeKey = null; } public static int getDimensionOrFraction(TypedArray a, int index, int base, int defValue) { public static float getDimensionOrFraction(TypedArray a, int index, int base, float defValue) { final TypedValue value = a.peekValue(index); if (value == null) return defValue; if (isFractionValue(value)) { // Round it to avoid values like 47.9999 from getting truncated return Math.round(a.getFraction(index, base, base, defValue)); return a.getFraction(index, base, base, defValue); } else if (isDimensionValue(value)) { return a.getDimensionPixelOffset(index, defValue); return a.getDimension(index, defValue); } else if (isIntegerValue(value)) { // For enum value. return a.getInt(index, defValue); return a.getInt(index, 0); } return defValue; } Loading