Add horizontal edges paddings to phone/number layout

Bug: 4948171
Change-Id: I8a06a25ffcbd141c9418e77e982233166a347914
main
Tadashi G. Takaoka 2011-09-26 11:26:38 +09:00
parent acf6b6815a
commit 287f4f83e9
19 changed files with 505 additions and 316 deletions

View File

@ -25,7 +25,6 @@
<!-- key_height + key_bottom_gap = popup_key_height -->
<!-- <dimen name="key_height">0.260in</dimen>-->
<dimen name="popup_key_height">0.280in</dimen>
<dimen name="keyboard_horizontal_edges_padding">0.0in</dimen>
<fraction name="keyboard_top_padding">1.818%p</fraction>
<fraction name="keyboard_bottom_padding">0.0%p</fraction>

View File

@ -23,7 +23,6 @@
<dimen name="keyboardHeight">45.0mm</dimen>
<fraction name="minKeyboardHeight">45%p</fraction>
<dimen name="keyboard_horizontal_edges_padding">0dp</dimen>
<fraction name="keyboard_top_padding">2.444%p</fraction>
<fraction name="keyboard_bottom_padding">0.0%p</fraction>
<fraction name="key_bottom_gap">4.911%p</fraction>

View File

@ -26,7 +26,6 @@
<dimen name="popup_key_height">10.0mm</dimen>
<dimen name="keyboard_horizontal_edges_padding">0.0mm</dimen>
<fraction name="keyboard_top_padding">2.291%p</fraction>
<fraction name="keyboard_bottom_padding">0.0%p</fraction>
<fraction name="key_bottom_gap">3.750%p</fraction>

View File

@ -23,7 +23,6 @@
<dimen name="keyboardHeight">58.0mm</dimen>
<fraction name="minKeyboardHeight">45%p</fraction>
<dimen name="keyboard_horizontal_edges_padding">0.0mm</dimen>
<fraction name="keyboard_top_padding">1.896%p</fraction>
<fraction name="keyboard_bottom_padding">0.0%p</fraction>

View File

@ -24,7 +24,6 @@
<fraction name="maxKeyboardHeight">50%p</fraction>
<fraction name="minKeyboardHeight">-35.0%p</fraction>
<dimen name="keyboard_horizontal_edges_padding">0.0mm</dimen>
<fraction name="keyboard_top_padding">2.291%p</fraction>
<fraction name="keyboard_bottom_padding">0.0%p</fraction>

View File

@ -144,19 +144,10 @@
<!-- Minimum keyboard height represented in pixels, percentage of display height if fraction
is positive, or percentage of display width if fraction is negative. -->
<attr name="minKeyboardHeight" format="dimension|fraction" />
<!-- Keyboard top and bottom paddings. -->
<!-- Keyboard top, bottom, both horizontal edges paddings. -->
<attr name="keyboardTopPadding" format="dimension|fraction" />
<attr name="keyboardBottomPadding" format="dimension|fraction" />
<!-- Default width of a key, in pixels or percentage of display width.
If the value is zero, the actual key width will be determined to fill out the area up
to the right edge of the keyboard.
If the value is negative, the actual key width will be determined to fill out the
area between the nearest key on the left hand side and the right edge of the keyboard.
-->
<attr name="keyWidth" format="dimension|fraction|enum">
<enum name="fillRight" value="-1" />
<enum name="fillBoth" value="-2" />
</attr>
<attr name="keyboardHorizontalEdgesPadding" format="dimension|fraction" />
<!-- Default height of a row (key height + vertical gap), in pixels or percentage of
keyboard height. -->
<attr name="rowHeight" format="dimension|fraction" />
@ -258,6 +249,17 @@
<!-- Visual insets -->
<attr name="visualInsetsLeft" format="dimension|fraction" />
<attr name="visualInsetsRight" format="dimension|fraction" />
<!-- Width of the key, in pixels or percentage of display width.
If the value is fillRight, the actual key width will be determined to fill out the area
up to the right edge of the keyboard.
If the value is fillBoth, the actual key width will be determined to fill out the
area between the nearest key on the left hand side and the right edge of the keyboard.
-->
<!-- This should be aligned with KeyboardBuilder.Row.KEYWIDTH_* -->
<attr name="keyWidth" format="dimension|fraction|enum">
<enum name="fillRight" value="-1" />
<enum name="fillBoth" value="-2" />
</attr>
<!-- The X-coordinate of upper right corner of this key including horizontal gap.
If the value is negative, the origin is the right edge of the keyboard. -->
<attr name="keyXPos" format="dimension|fraction" />

View File

@ -29,9 +29,9 @@
<dimen name="mini_keyboard_horizontal_edges_padding">16dip</dimen>
<dimen name="mini_keyboard_key_horizontal_padding">8dip</dimen>
<dimen name="keyboard_horizontal_edges_padding">0dp</dimen>
<fraction name="keyboard_top_padding">1.556%p</fraction>
<fraction name="keyboard_bottom_padding">4.669%p</fraction>
<fraction name="keyboard_horizontal_edges_padding">0%p</fraction>
<fraction name="key_bottom_gap">6.250%p</fraction>
<fraction name="key_horizontal_gap">1.352%p</fraction>

View File

@ -24,6 +24,7 @@
<item name="moreKeysTemplate">@xml/kbd_mini_keyboard_template</item>
<item name="keyboardTopPadding">@fraction/keyboard_top_padding</item>
<item name="keyboardBottomPadding">@fraction/keyboard_bottom_padding</item>
<item name="keyboardHorizontalEdgesPadding">@fraction/keyboard_horizontal_edges_padding</item>
<item name="horizontalGap">@fraction/key_horizontal_gap</item>
<item name="verticalGap">@fraction/key_bottom_gap</item>
<item name="maxMoreKeysColumn">@integer/config_max_more_keys_column</item>

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
**
** Copyright 2011, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<Keyboard
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
latin:keyboardHorizontalEdgesPadding="10%p"
latin:keyWidth="26.67%p"
>
<include
latin:keyboardLayout="@xml/kbd_rows_number" />
</Keyboard>

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
**
** Copyright 2011, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<Keyboard
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
latin:keyboardHorizontalEdgesPadding="10%p"
latin:keyWidth="26.67%p"
>
<include
latin:keyboardLayout="@xml/kbd_rows_phone" />
</Keyboard>

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
**
** Copyright 2008, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<Keyboard
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
latin:keyboardHorizontalEdgesPadding="10%p"
latin:keyWidth="26.67%p"
>
<include
latin:keyboardLayout="@xml/kbd_rows_phone_shift" />
</Keyboard>

View File

@ -23,109 +23,5 @@
latin:keyWidth="26.67%p"
>
<include
latin:keyboardLayout="@xml/kbd_key_styles" />
<include
latin:keyboardLayout="@xml/kbd_numkey_styles" />
<switch>
<case
latin:passwordInput="true"
>
<Row>
<Key
latin:keyStyle="num1KeyStyle" />
<Key
latin:keyStyle="num2KeyStyle" />
<Key
latin:keyStyle="num3KeyStyle" />
</Row>
<Row>
<Key
latin:keyStyle="num4KeyStyle" />
<Key
latin:keyStyle="num5KeyStyle" />
<Key
latin:keyStyle="num6KeyStyle" />
</Row>
<Row>
<Key
latin:keyStyle="num7KeyStyle" />
<Key
latin:keyStyle="num8KeyStyle" />
<Key
latin:keyStyle="num9KeyStyle" />
<Key
latin:keyStyle="deleteKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Spacer />
<Key
latin:keyStyle="num0KeyStyle" />
<Spacer />
<Key
latin:keyStyle="returnKeyStyle"
latin:keyWidth="fillRight" />
</Row>
</case>
<!-- latin:passwordInput="false" -->
<default>
<Row>
<Key
latin:keyLabel="1"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="2"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="3"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="-"
latin:keyStyle="numFunctionalKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Key
latin:keyLabel="4"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="5"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="6"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel=","
latin:keyStyle="numFunctionalKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Key
latin:keyLabel="7"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="8"
latin:keyStyle="numKeyStyle"/>
<Key
latin:keyLabel="9"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyStyle="deleteKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Key
latin:keyStyle="numSpaceKeyStyle" />
<Key
latin:keyLabel="0"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="."
latin:keyStyle="numKeyStyle" />
<Key
latin:keyStyle="returnKeyStyle"
latin:keyWidth="fillRight" />
</Row>
</default>
</switch>
latin:keyboardLayout="@xml/kbd_rows_number" />
</Keyboard>

View File

@ -23,53 +23,5 @@
latin:keyWidth="26.67%p"
>
<include
latin:keyboardLayout="@xml/kbd_key_styles" />
<include
latin:keyboardLayout="@xml/kbd_numkey_styles" />
<Row>
<Key
latin:keyStyle="num1KeyStyle" />
<Key
latin:keyStyle="num2KeyStyle" />
<Key
latin:keyStyle="num3KeyStyle" />
<Key
latin:keyLabel="-"
latin:keyStyle="numFunctionalKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Key
latin:keyStyle="num4KeyStyle" />
<Key
latin:keyStyle="num5KeyStyle" />
<Key
latin:keyStyle="num6KeyStyle" />
<Key
latin:keyLabel="."
latin:keyStyle="numFunctionalKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Key
latin:keyStyle="num7KeyStyle" />
<Key
latin:keyStyle="num8KeyStyle" />
<Key
latin:keyStyle="num9KeyStyle" />
<Key
latin:keyStyle="deleteKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Key
latin:keyStyle="numSwitchToAltKeyStyle" />
<Key
latin:keyStyle="num0KeyStyle" />
<Key
latin:keyStyle="numSpaceKeyStyle" />
<Key
latin:keyStyle="returnKeyStyle"
latin:keyWidth="fillRight" />
</Row>
latin:keyboardLayout="@xml/kbd_rows_phone" />
</Keyboard>

View File

@ -23,66 +23,5 @@
latin:keyWidth="26.67%p"
>
<include
latin:keyboardLayout="@xml/kbd_key_styles" />
<include
latin:keyboardLayout="@xml/kbd_numkey_styles" />
<Row>
<Key
latin:keyLabel="("
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="/"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel=")"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="-"
latin:keyStyle="numFunctionalKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Key
latin:keyLabel="N" />
<!-- Pause is a comma. Check PhoneNumberUtils.java to see if this
has changed. -->
<Key
latin:code="44"
latin:keyLabel="@string/label_pause_key"
latin:keyLabelOption="followKeyHintLabelRatio|autoXScale" />
<Key
latin:keyLabel=","
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="."
latin:keyStyle="numFunctionalKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Key
latin:keyStyle="numStarKeyStyle" />
<!-- Wait is a semicolon. -->
<Key
latin:code="59"
latin:keyLabel="@string/label_wait_key"
latin:keyLabelOption="followKeyHintLabelRatio|autoXScale" />
<Key
latin:keyLabel="#"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyStyle="deleteKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Key
latin:keyStyle="numSwitchToNumericKeyStyle" />
<Key
latin:keyLabel="+"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyStyle="numSpaceKeyStyle" />
<Key
latin:keyStyle="returnKeyStyle"
latin:keyWidth="fillRight" />
</Row>
latin:keyboardLayout="@xml/kbd_rows_phone_shift" />
</Keyboard>

View File

@ -0,0 +1,130 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
**
** Copyright 2011, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<merge
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
<include
latin:keyboardLayout="@xml/kbd_key_styles" />
<include
latin:keyboardLayout="@xml/kbd_numkey_styles" />
<switch>
<case
latin:passwordInput="true"
>
<Row>
<Key
latin:keyStyle="num1KeyStyle" />
<Key
latin:keyStyle="num2KeyStyle" />
<Key
latin:keyStyle="num3KeyStyle" />
</Row>
<Row>
<Key
latin:keyStyle="num4KeyStyle" />
<Key
latin:keyStyle="num5KeyStyle" />
<Key
latin:keyStyle="num6KeyStyle" />
</Row>
<Row>
<Key
latin:keyStyle="num7KeyStyle" />
<Key
latin:keyStyle="num8KeyStyle" />
<Key
latin:keyStyle="num9KeyStyle" />
<Key
latin:keyStyle="deleteKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Spacer />
<Key
latin:keyStyle="num0KeyStyle" />
<Spacer />
<Key
latin:keyStyle="returnKeyStyle"
latin:keyWidth="fillRight" />
</Row>
</case>
<!-- latin:passwordInput="false" -->
<default>
<Row>
<Key
latin:keyLabel="1"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="2"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="3"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="-"
latin:keyStyle="numFunctionalKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Key
latin:keyLabel="4"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="5"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="6"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel=","
latin:keyStyle="numFunctionalKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Key
latin:keyLabel="7"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="8"
latin:keyStyle="numKeyStyle"/>
<Key
latin:keyLabel="9"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyStyle="deleteKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Key
latin:keyStyle="numSpaceKeyStyle" />
<Key
latin:keyLabel="0"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="."
latin:keyStyle="numKeyStyle" />
<Key
latin:keyStyle="returnKeyStyle"
latin:keyWidth="fillRight" />
</Row>
</default>
</switch>
</merge>

View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
**
** Copyright 2011, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<merge
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
<include
latin:keyboardLayout="@xml/kbd_key_styles" />
<include
latin:keyboardLayout="@xml/kbd_numkey_styles" />
<Row>
<Key
latin:keyStyle="num1KeyStyle" />
<Key
latin:keyStyle="num2KeyStyle" />
<Key
latin:keyStyle="num3KeyStyle" />
<Key
latin:keyLabel="-"
latin:keyStyle="numFunctionalKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Key
latin:keyStyle="num4KeyStyle" />
<Key
latin:keyStyle="num5KeyStyle" />
<Key
latin:keyStyle="num6KeyStyle" />
<Key
latin:keyLabel="."
latin:keyStyle="numFunctionalKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Key
latin:keyStyle="num7KeyStyle" />
<Key
latin:keyStyle="num8KeyStyle" />
<Key
latin:keyStyle="num9KeyStyle" />
<Key
latin:keyStyle="deleteKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Key
latin:keyStyle="numSwitchToAltKeyStyle" />
<Key
latin:keyStyle="num0KeyStyle" />
<Key
latin:keyStyle="numSpaceKeyStyle" />
<Key
latin:keyStyle="returnKeyStyle"
latin:keyWidth="fillRight" />
</Row>
</merge>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
**
** Copyright 2011, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<merge
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
>
<include
latin:keyboardLayout="@xml/kbd_key_styles" />
<include
latin:keyboardLayout="@xml/kbd_numkey_styles" />
<Row>
<Key
latin:keyLabel="("
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="/"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel=")"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="-"
latin:keyStyle="numFunctionalKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Key
latin:keyLabel="N" />
<!-- Pause is a comma. Check PhoneNumberUtils.java to see if this
has changed. -->
<Key
latin:code="44"
latin:keyLabel="@string/label_pause_key"
latin:keyLabelOption="followKeyHintLabelRatio|autoXScale" />
<Key
latin:keyLabel=","
latin:keyStyle="numKeyStyle" />
<Key
latin:keyLabel="."
latin:keyStyle="numFunctionalKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Key
latin:keyStyle="numStarKeyStyle" />
<!-- Wait is a semicolon. -->
<Key
latin:code="59"
latin:keyLabel="@string/label_wait_key"
latin:keyLabelOption="followKeyHintLabelRatio|autoXScale" />
<Key
latin:keyLabel="#"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyStyle="deleteKeyStyle"
latin:keyWidth="fillRight" />
</Row>
<Row>
<Key
latin:keyStyle="numSwitchToNumericKeyStyle" />
<Key
latin:keyLabel="+"
latin:keyStyle="numKeyStyle" />
<Key
latin:keyStyle="numSpaceKeyStyle" />
<Key
latin:keyStyle="returnKeyStyle"
latin:keyWidth="fillRight" />
</Row>
</merge>

View File

@ -120,11 +120,6 @@ public class Key {
/** Whether this key needs to show the "..." popup hint for special purposes */
private boolean mNeedsSpecialPopupHint;
// keyWidth enum constants
private static final int KEYWIDTH_NOT_ENUM = 0;
private static final int KEYWIDTH_FILL_RIGHT = -1;
private static final int KEYWIDTH_FILL_BOTH = -2;
// RTL parenthesis character swapping map.
private static final Map<Integer, Integer> sRtlParenthesisMap = new HashMap<Integer, Integer>();
@ -216,21 +211,9 @@ public class Key {
*/
public Key(Resources res, KeyboardParams params, KeyboardBuilder.Row row,
XmlResourceParser parser, KeyStyles keyStyles) {
final TypedArray keyboardAttr = res.obtainAttributes(Xml.asAttributeSet(parser),
R.styleable.Keyboard);
mHeight = (int)KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_rowHeight, params.mBaseHeight, row.mRowHeight)
- params.mVerticalGap;
final float horizontalGap = isSpacer() ? 0
: KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_horizontalGap, params.mBaseWidth,
params.mHorizontalGap);
final float horizontalGap = isSpacer() ? 0 : params.mHorizontalGap;
mVerticalGap = params.mVerticalGap;
final int widthType = KeyboardBuilder.getEnumValue(keyboardAttr,
R.styleable.Keyboard_keyWidth, KEYWIDTH_NOT_ENUM);
float keyWidth = KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_keyWidth, params.mBaseWidth, row.mDefaultKeyWidth);
keyboardAttr.recycle();
mHeight = row.mRowHeight - mVerticalGap;
final TypedArray keyAttr = res.obtainAttributes(Xml.asAttributeSet(parser),
R.styleable.Keyboard_Key);
@ -245,38 +228,16 @@ public class Key {
style = keyStyles.getEmptyKeyStyle();
}
final int keyboardWidth = params.mOccupiedWidth;
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 keyboardWidth + keyXPos.
keyXPos += keyboardWidth;
if (keyXPos < x) {
// keyXPos shouldn't be less than x because drawable area for this key starts
// at x. Or, this key will overlaps the adjacent key on its left hand side.
keyXPos = x;
}
}
if (widthType == KEYWIDTH_FILL_RIGHT) {
// If keyWidth is zero, the actual key width will be determined to fill out the
// area up to the right edge of the keyboard.
keyWidth = keyboardWidth - keyXPos;
} else if (widthType == KEYWIDTH_FILL_BOTH) {
// If keyWidth is negative, the actual key width will be determined to fill out the
// area between the nearest key on the left hand side and the right edge of the
// keyboard.
keyXPos = x;
keyWidth = keyboardWidth - keyXPos;
}
final float keyXPos = row.getKeyX(keyAttr);
final float keyWidth = row.getKeyWidth(keyAttr, keyXPos);
// Horizontal gap is divided equally to both sides of the key.
mX = (int) (keyXPos + horizontalGap / 2);
mY = row.mCurrentY;
mY = row.getKeyY();
mWidth = (int) (keyWidth - horizontalGap);
mHorizontalGap = (int) horizontalGap;
// Update row to have current x coordinate.
row.mCurrentX = keyXPos + keyWidth;
row.setXPos(keyXPos + keyWidth);
final CharSequence[] moreKeys = style.getTextArray(keyAttr,
R.styleable.Keyboard_Key_moreKeys);
@ -288,20 +249,20 @@ public class Key {
} else {
mMoreKeys = moreKeys;
}
mMaxMoreKeysColumn = style.getInt(keyboardAttr, R.styleable.Keyboard_Key_maxMoreKeysColumn,
params.mMaxMiniKeyboardColumn);
mMaxMoreKeysColumn = style.getInt(keyAttr,
R.styleable.Keyboard_Key_maxMoreKeysColumn, params.mMaxMiniKeyboardColumn);
mBackgroundType = style.getInt(
keyAttr, R.styleable.Keyboard_Key_backgroundType, BACKGROUND_TYPE_NORMAL);
mBackgroundType = style.getInt(keyAttr,
R.styleable.Keyboard_Key_backgroundType, BACKGROUND_TYPE_NORMAL);
mRepeatable = style.getBoolean(keyAttr, R.styleable.Keyboard_Key_isRepeatable, false);
mEnabled = style.getBoolean(keyAttr, R.styleable.Keyboard_Key_enabled, true);
mEdgeFlags = 0;
final KeyboardIconsSet iconsSet = params.mIconsSet;
mVisualInsetsLeft = (int) KeyboardBuilder.getDimensionOrFraction(keyAttr,
R.styleable.Keyboard_Key_visualInsetsLeft, keyboardWidth, 0);
R.styleable.Keyboard_Key_visualInsetsLeft, params.mBaseWidth, 0);
mVisualInsetsRight = (int) KeyboardBuilder.getDimensionOrFraction(keyAttr,
R.styleable.Keyboard_Key_visualInsetsRight, keyboardWidth, 0);
R.styleable.Keyboard_Key_visualInsetsRight, params.mBaseWidth, 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,

View File

@ -144,27 +144,96 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
* defines.
*/
public static class Row {
// keyWidth enum constants
private static final int KEYWIDTH_NOT_ENUM = 0;
private static final int KEYWIDTH_FILL_RIGHT = -1;
private static final int KEYWIDTH_FILL_BOTH = -2;
private final KeyboardParams mParams;
/** Default width of a key in this row. */
public final float mDefaultKeyWidth;
/** Default height of a key in this row. */
public final int mRowHeight;
public final int mCurrentY;
private final int mCurrentY;
// Will be updated by {@link Key}'s constructor.
public float mCurrentX;
private float mCurrentX;
public Row(Resources res, KeyboardParams params, XmlResourceParser parser, int y) {
TypedArray a = res.obtainAttributes(Xml.asAttributeSet(parser),
mParams = params;
TypedArray keyboardAttr = res.obtainAttributes(Xml.asAttributeSet(parser),
R.styleable.Keyboard);
mDefaultKeyWidth = KeyboardBuilder.getDimensionOrFraction(a,
R.styleable.Keyboard_keyWidth, params.mBaseWidth, params.mDefaultKeyWidth);
mRowHeight = (int)KeyboardBuilder.getDimensionOrFraction(a,
mRowHeight = (int)KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_rowHeight, params.mBaseHeight, params.mDefaultRowHeight);
a.recycle();
keyboardAttr.recycle();
TypedArray keyAttr = res.obtainAttributes(Xml.asAttributeSet(parser),
R.styleable.Keyboard_Key);
mDefaultKeyWidth = KeyboardBuilder.getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_Key_keyWidth, params.mBaseWidth, params.mDefaultKeyWidth);
keyAttr.recycle();
mCurrentY = y;
mCurrentX = 0.0f;
}
public void setXPos(float keyXPos) {
mCurrentX = keyXPos;
}
public void advanceXPos(float width) {
mCurrentX += width;
}
public int getKeyY() {
return mCurrentY;
}
public float getKeyX(TypedArray keyAttr) {
final int widthType = KeyboardBuilder.getEnumValue(keyAttr,
R.styleable.Keyboard_Key_keyWidth, KEYWIDTH_NOT_ENUM);
if (widthType == KEYWIDTH_FILL_BOTH) {
// If keyWidth is fillBoth, the key width should start right after the nearest key
// on the left hand side.
return mCurrentX;
}
final int keyboardRightEdge = mParams.mOccupiedWidth - mParams.mHorizontalEdgesPadding;
if (keyAttr.hasValue(R.styleable.Keyboard_Key_keyXPos)) {
final float keyXPos = KeyboardBuilder.getDimensionOrFraction(keyAttr,
R.styleable.Keyboard_Key_keyXPos, mParams.mBaseWidth, 0);
if (keyXPos < 0) {
// If keyXPos is negative, the actual x-coordinate will be
// keyboardWidth + keyXPos.
// keyXPos shouldn't be less than mCurrentX because drawable area for this key
// starts at mCurrentX. Or, this key will overlaps the adjacent key on its left
// hand side.
return Math.max(keyXPos + keyboardRightEdge, mCurrentX);
} else {
return keyXPos + mParams.mHorizontalEdgesPadding;
}
}
return mCurrentX;
}
public float getKeyWidth(TypedArray keyAttr, float keyXPos) {
final int widthType = KeyboardBuilder.getEnumValue(keyAttr,
R.styleable.Keyboard_Key_keyWidth, KEYWIDTH_NOT_ENUM);
switch (widthType) {
case KEYWIDTH_FILL_RIGHT:
case KEYWIDTH_FILL_BOTH:
final int keyboardRightEdge =
mParams.mOccupiedWidth - mParams.mHorizontalEdgesPadding;
// If keyWidth is fillRight, the actual key width will be determined to fill out the
// area up to the right edge of the keyboard.
// If keyWidth is fillBoth, the actual key width will be determined to fill out the
// area between the nearest key on the left hand side and the right edge of the
// keyboard.
return keyboardRightEdge - keyXPos;
default: // KEYWIDTH_NOT_ENUM
return KeyboardBuilder.getDimensionOrFraction(keyAttr,
R.styleable.Keyboard_Key_keyWidth, mParams.mBaseWidth, mDefaultKeyWidth);
}
}
}
public KeyboardBuilder(Context context, KP params) {
@ -174,8 +243,6 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
mDisplayMetrics = res.getDisplayMetrics();
mParams = params;
mParams.mHorizontalEdgesPadding = (int)res.getDimension(
R.dimen.keyboard_horizontal_edges_padding);
mParams.GRID_WIDTH = res.getInteger(R.integer.config_keyboard_grid_width);
mParams.GRID_HEIGHT = res.getInteger(R.integer.config_keyboard_grid_height);
@ -270,11 +337,13 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
R.styleable.Keyboard_keyboardTopPadding, params.mOccupiedHeight, 0);
params.mBottomPadding = (int)getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_keyboardBottomPadding, params.mOccupiedHeight, 0);
params.mHorizontalEdgesPadding = (int)getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_keyboardHorizontalEdgesPadding, mParams.mOccupiedWidth, 0);
params.mBaseWidth = params.mOccupiedWidth - params.mHorizontalEdgesPadding * 2
- params.mHorizontalCenterPadding;
params.mDefaultKeyWidth = (int)getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_keyWidth, params.mBaseWidth,
params.mDefaultKeyWidth = (int)getDimensionOrFraction(keyAttr,
R.styleable.Keyboard_Key_keyWidth, params.mBaseWidth,
params.mBaseWidth / DEFAULT_KEYBOARD_COLUMNS);
params.mHorizontalGap = (int)getDimensionOrFraction(keyboardAttr,
R.styleable.Keyboard_horizontalGap, params.mBaseWidth, 0);
@ -670,7 +739,6 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
}
private void startRow(Row row) {
row.mCurrentX = 0;
addEdgeSpace(mParams.mHorizontalEdgesPadding, row);
mCurrentRow = row;
mLeftEdge = true;
@ -685,7 +753,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
mRightEdgeKey = null;
}
addEdgeSpace(mParams.mHorizontalEdgesPadding, row);
mCurrentY += mCurrentRow.mRowHeight;
mCurrentY += row.mRowHeight;
mCurrentRow = null;
mTopEdge = false;
}
@ -706,7 +774,7 @@ public class KeyboardBuilder<KP extends KeyboardParams> {
}
private void addEdgeSpace(float width, Row row) {
row.mCurrentX += width;
row.advanceXPos(width);
mLeftEdge = false;
mRightEdgeKey = null;
}