Support keyXPos/keyWidth override in <include>

Change-Id: I03576a6fb7916f2f66f2035a04872fe89b573cdc
This commit is contained in:
Tadashi G. Takaoka 2012-01-27 21:20:57 +09:00
parent 32c4635ff4
commit a1e370ee4f

View File

@ -21,6 +21,7 @@ import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
@ -571,7 +572,7 @@ public class Keyboard {
private final Params mParams;
/** Default width of a key in this row. */
public final float mDefaultKeyWidth;
private float mDefaultKeyWidth;
/** Default height of a key in this row. */
public final int mRowHeight;
@ -598,6 +599,14 @@ public class Keyboard {
mCurrentX = 0.0f;
}
public float getDefaultKeyWidth() {
return mDefaultKeyWidth;
}
public void setDefaultKeyWidth(float defaultKeyWidth) {
mDefaultKeyWidth = defaultKeyWidth;
}
public void setXPos(float keyXPos) {
mCurrentX = keyXPos;
}
@ -638,6 +647,10 @@ public class Keyboard {
return mCurrentX;
}
public float getKeyWidth(TypedArray keyAttr) {
return getKeyWidth(keyAttr, mCurrentX);
}
public float getKeyWidth(TypedArray keyAttr, float keyXPos) {
final int widthType = Builder.getEnumValue(keyAttr,
R.styleable.Keyboard_Key_keyWidth, KEYWIDTH_NOT_ENUM);
@ -937,17 +950,33 @@ public class Keyboard {
if (skip) {
XmlParseUtils.checkEndTag(TAG_INCLUDE, parser);
} else {
final TypedArray a = mResources.obtainAttributes(Xml.asAttributeSet(parser),
final AttributeSet attr = Xml.asAttributeSet(parser);
final TypedArray keyboardAttr = mResources.obtainAttributes(attr,
R.styleable.Keyboard_Include);
final TypedArray keyAttr = mResources.obtainAttributes(attr,
R.styleable.Keyboard_Key);
int keyboardLayout = 0;
float savedDefaultKeyWidth = 0;
try {
XmlParseUtils.checkAttributeExists(a,
XmlParseUtils.checkAttributeExists(keyboardAttr,
R.styleable.Keyboard_Include_keyboardLayout, "keyboardLayout",
TAG_INCLUDE, parser);
keyboardLayout = a.getResourceId(
keyboardLayout = keyboardAttr.getResourceId(
R.styleable.Keyboard_Include_keyboardLayout, 0);
if (row != null) {
savedDefaultKeyWidth = row.getDefaultKeyWidth();
if (keyAttr.hasValue(R.styleable.Keyboard_Key_keyXPos)) {
// Override current x coordinate.
row.setXPos(row.getKeyX(keyAttr));
}
if (keyAttr.hasValue(R.styleable.Keyboard_Key_keyWidth)) {
// Override default key width.
row.setDefaultKeyWidth(row.getKeyWidth(keyAttr));
}
}
} finally {
a.recycle();
keyboardAttr.recycle();
keyAttr.recycle();
}
XmlParseUtils.checkEndTag(TAG_INCLUDE, parser);
@ -957,6 +986,10 @@ public class Keyboard {
try {
parseMerge(parserForInclude, row, skip);
} finally {
if (row != null) {
// Restore default key width.
row.setDefaultKeyWidth(savedDefaultKeyWidth);
}
parserForInclude.close();
}
}