Merge pull request #159 from ismailnurudeen/feat/optional-num-row

Feat/optional number row
This commit is contained in:
Tibor Kaputa 2023-05-03 20:46:45 +02:00 committed by GitHub
commit 0e8b8a357b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 543 additions and 8 deletions

View File

@ -44,6 +44,7 @@ class SettingsActivity : SimpleActivity() {
setupKeyboardLanguage() setupKeyboardLanguage()
setupKeyboardHeightMultiplier() setupKeyboardHeightMultiplier()
setupShowClipboardContent() setupShowClipboardContent()
setupShowNumbersRow()
updateTextColors(settings_nested_scrollview) updateTextColors(settings_nested_scrollview)
@ -159,4 +160,11 @@ class SettingsActivity : SimpleActivity() {
config.showClipboardContent = settings_show_clipboard_content.isChecked config.showClipboardContent = settings_show_clipboard_content.isChecked
} }
} }
private fun setupShowNumbersRow() {
settings_show_numbers_row.isChecked = config.showNumbersRow
settings_show_numbers_row_holder.setOnClickListener {
settings_show_numbers_row.toggle()
config.showNumbersRow = settings_show_numbers_row.isChecked
}
}
} }

View File

@ -37,6 +37,9 @@ class Config(context: Context) : BaseConfig(context) {
get() = prefs.getBoolean(SHOW_CLIPBOARD_CONTENT, true) get() = prefs.getBoolean(SHOW_CLIPBOARD_CONTENT, true)
set(showClipboardContent) = prefs.edit().putBoolean(SHOW_CLIPBOARD_CONTENT, showClipboardContent).apply() set(showClipboardContent) = prefs.edit().putBoolean(SHOW_CLIPBOARD_CONTENT, showClipboardContent).apply()
var showNumbersRow: Boolean
get() = prefs.getBoolean(SHOW_NUMBERS_ROW, false)
set(showNumbersRow) = prefs.edit().putBoolean(SHOW_NUMBERS_ROW, showNumbersRow).apply()
private fun getDefaultLanguage(): Int { private fun getDefaultLanguage(): Int {
val conf = context.resources.configuration val conf = context.resources.configuration

View File

@ -15,6 +15,7 @@ const val LAST_EXPORTED_CLIPS_FOLDER = "last_exported_clips_folder"
const val KEYBOARD_LANGUAGE = "keyboard_language" const val KEYBOARD_LANGUAGE = "keyboard_language"
const val HEIGHT_MULTIPLIER = "height_multiplier" const val HEIGHT_MULTIPLIER = "height_multiplier"
const val SHOW_CLIPBOARD_CONTENT = "show_clipboard_content" const val SHOW_CLIPBOARD_CONTENT = "show_clipboard_content"
const val SHOW_NUMBERS_ROW = "show_numbers_row"
// differentiate current and pinned clips at the keyboards' Clipboard section // differentiate current and pinned clips at the keyboards' Clipboard section
const val ITEM_SECTION_LABEL = 0 const val ITEM_SECTION_LABEL = 0

View File

@ -97,6 +97,8 @@ class MyKeyboard {
var parent: MyKeyboard var parent: MyKeyboard
var isNumbersRow: Boolean = false
constructor(parent: MyKeyboard) { constructor(parent: MyKeyboard) {
this.parent = parent this.parent = parent
} }
@ -107,6 +109,7 @@ class MyKeyboard {
defaultWidth = getDimensionOrFraction(a, R.styleable.MyKeyboard_keyWidth, parent.mDisplayWidth, parent.mDefaultWidth) defaultWidth = getDimensionOrFraction(a, R.styleable.MyKeyboard_keyWidth, parent.mDisplayWidth, parent.mDefaultWidth)
defaultHeight = (res.getDimension(R.dimen.key_height) * this.parent.mKeyboardHeightMultiplier).roundToInt() defaultHeight = (res.getDimension(R.dimen.key_height) * this.parent.mKeyboardHeightMultiplier).roundToInt()
defaultHorizontalGap = getDimensionOrFraction(a, R.styleable.MyKeyboard_horizontalGap, parent.mDisplayWidth, parent.mDefaultHorizontalGap) defaultHorizontalGap = getDimensionOrFraction(a, R.styleable.MyKeyboard_horizontalGap, parent.mDisplayWidth, parent.mDefaultHorizontalGap)
isNumbersRow = a.getBoolean(R.styleable.MyKeyboard_isNumbersRow, false)
a.recycle() a.recycle()
} }
} }
@ -342,14 +345,31 @@ class MyKeyboard {
if (event == XmlResourceParser.START_TAG) { if (event == XmlResourceParser.START_TAG) {
when (parser.name) { when (parser.name) {
TAG_ROW -> { TAG_ROW -> {
currentRow = createRowFromXml(res, parser)
if (currentRow.isNumbersRow && !context.config.showNumbersRow) {
continue
}
inRow = true inRow = true
x = 0 x = 0
currentRow = createRowFromXml(res, parser)
mRows.add(currentRow) mRows.add(currentRow)
} }
TAG_KEY -> { TAG_KEY -> {
if (currentRow?.isNumbersRow == true && !context.config.showNumbersRow) {
continue
}
inKey = true inKey = true
key = createKeyFromXml(res, currentRow!!, x, y, parser) key = createKeyFromXml(res, currentRow!!, x, y, parser)
if (context.config.showNumbersRow) {
// Removes numbers (i.e 0-9) from the popupCharacters if numbers row is enabled
key.apply {
popupCharacters = popupCharacters?.replace(Regex("\\d+"), "")
if (popupCharacters.isNullOrEmpty()) {
popupResId = 0
}
}
}
mKeys!!.add(key) mKeys!!.add(key)
if (key.code == KEYCODE_ENTER) { if (key.code == KEYCODE_ENTER) {
val enterResourceId = when (mEnterKeyType) { val enterResourceId = when (mEnterKeyType) {
@ -362,6 +382,7 @@ class MyKeyboard {
} }
currentRow.mKeys.add(key) currentRow.mKeys.add(key)
} }
TAG_KEYBOARD -> { TAG_KEYBOARD -> {
parseKeyboardAttributes(res, parser) parseKeyboardAttributes(res, parser)
} }

View File

@ -138,6 +138,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
private var mLastKey = 0 private var mLastKey = 0
private var mLastCodeX = 0 private var mLastCodeX = 0
private var mLastCodeY = 0 private var mLastCodeY = 0
private var mLastKeyPressedCode = 0
private var mCurrentKey: Int = NOT_A_KEY private var mCurrentKey: Int = NOT_A_KEY
private var mLastKeyTime = 0L private var mLastKeyTime = 0L
private var mCurrentKeyTime = 0L private var mCurrentKeyTime = 0L
@ -263,6 +264,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
val repeat = Message.obtain(this, MSG_REPEAT) val repeat = Message.obtain(this, MSG_REPEAT)
sendMessageDelayed(repeat, REPEAT_INTERVAL.toLong()) sendMessageDelayed(repeat, REPEAT_INTERVAL.toLong())
} }
MSG_LONGPRESS -> openPopupIfRequired(msg.obj as MotionEvent) MSG_LONGPRESS -> openPopupIfRequired(msg.obj as MotionEvent)
} }
} }
@ -591,7 +593,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
label, (key.width / 2).toFloat(), key.height / 2 + (paint.textSize - paint.descent()) / 2, paint label, (key.width / 2).toFloat(), key.height / 2 + (paint.textSize - paint.descent()) / 2, paint
) )
if (key.topSmallNumber.isNotEmpty()) { if (key.topSmallNumber.isNotEmpty() && !context.config.showNumbersRow) {
canvas.drawText(key.topSmallNumber, key.width - mTopSmallNumberMarginWidth, mTopSmallNumberMarginHeight, smallLetterPaint) canvas.drawText(key.topSmallNumber, key.width - mTopSmallNumberMarginWidth, mTopSmallNumberMarginHeight, smallLetterPaint)
} }
@ -1204,6 +1206,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
} }
} }
} }
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> { MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
mMiniKeyboard?.mKeys?.firstOrNull { it.focused }?.apply { mMiniKeyboard?.mKeys?.firstOrNull { it.focused }?.apply {
mOnKeyboardActionListener!!.onKey(code) mOnKeyboardActionListener!!.onKey(code)
@ -1262,6 +1265,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
invalidateKey(mCurrentKey) invalidateKey(mCurrentKey)
return true return true
} }
MotionEvent.ACTION_DOWN -> { MotionEvent.ACTION_DOWN -> {
mAbortKey = false mAbortKey = false
mLastCodeX = touchX mLastCodeX = touchX
@ -1278,8 +1282,8 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
} else { } else {
0 0
} }
mOnKeyboardActionListener!!.onPress(onPressKey) mOnKeyboardActionListener!!.onPress(onPressKey)
mLastKeyPressedCode = onPressKey
var wasHandled = false var wasHandled = false
if (mCurrentKey >= 0 && mKeys[mCurrentKey].repeatable) { if (mCurrentKey >= 0 && mKeys[mCurrentKey].repeatable) {
@ -1310,6 +1314,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
showPreview(keyIndex) showPreview(keyIndex)
} }
} }
MotionEvent.ACTION_MOVE -> { MotionEvent.ACTION_MOVE -> {
var continueLongPress = false var continueLongPress = false
if (keyIndex != NOT_A_KEY) { if (keyIndex != NOT_A_KEY) {
@ -1363,6 +1368,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
mLastMoveTime = eventTime mLastMoveTime = eventTime
} }
} }
MotionEvent.ACTION_UP -> { MotionEvent.ACTION_UP -> {
mLastSpaceMoveX = 0 mLastSpaceMoveX = 0
removeMessages() removeMessages()
@ -1391,11 +1397,14 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
detectAndSendKey(mCurrentKey, touchX, touchY, eventTime) detectAndSendKey(mCurrentKey, touchX, touchY, eventTime)
} }
if (mLastKeyPressedCode != KEYCODE_MODE_CHANGE) {
invalidateKey(keyIndex) invalidateKey(keyIndex)
}
mRepeatKeyIndex = NOT_A_KEY mRepeatKeyIndex = NOT_A_KEY
mOnKeyboardActionListener!!.onActionUp() mOnKeyboardActionListener!!.onActionUp()
mIsLongPressingSpace = false mIsLongPressingSpace = false
} }
MotionEvent.ACTION_CANCEL -> { MotionEvent.ACTION_CANCEL -> {
mIsLongPressingSpace = false mIsLongPressingSpace = false
mLastSpaceMoveX = 0 mLastSpaceMoveX = 0
@ -1515,12 +1524,14 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
mHandler!!.sendMessageDelayed(msg, REPEAT_START_DELAY.toLong()) mHandler!!.sendMessageDelayed(msg, REPEAT_START_DELAY.toLong())
true true
} }
MotionEvent.ACTION_UP -> { MotionEvent.ACTION_UP -> {
mHandler!!.removeMessages(MSG_REPEAT) mHandler!!.removeMessages(MSG_REPEAT)
mRepeatKeyIndex = NOT_A_KEY mRepeatKeyIndex = NOT_A_KEY
isPressed = false isPressed = false
false false
} }
else -> false else -> false
} }
} }

View File

@ -189,6 +189,20 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/show_clipboard_content" /> android:text="@string/show_clipboard_content" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_show_numbers_row_holder"
style="@style/SettingsHolderCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/settings_show_numbers_row"
style="@style/SettingsCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/show_numbers_row" />
</RelativeLayout> </RelativeLayout>
<RelativeLayout <RelativeLayout

View File

@ -11,6 +11,7 @@
<declare-styleable name="MyKeyboard"> <declare-styleable name="MyKeyboard">
<attr name="keyWidth" format="fraction" /> <attr name="keyWidth" format="fraction" />
<attr name="horizontalGap" format="fraction" /> <attr name="horizontalGap" format="fraction" />
<attr name="isNumbersRow" format="boolean" />
</declare-styleable> </declare-styleable>
<declare-styleable name="MyKeyboard_Key"> <declare-styleable name="MyKeyboard_Key">

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto"> <Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row app:keyWidth="9.091%p"> <Row app:keyWidth="9.091%p">
<Key <Key
app:keyEdgeFlags="left" app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto"> <Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row app:keyWidth="9.05%p"> <Row app:keyWidth="9.05%p">
<Key <Key
app:keyEdgeFlags="left" app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto"> <Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row> <Row>
<Key <Key
app:keyEdgeFlags="left" app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto"> <Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row> <Row>
<Key <Key
app:keyEdgeFlags="left" app:keyEdgeFlags="left"
@ -125,17 +159,17 @@
app:code="-6" app:code="-6"
app:keyEdgeFlags="left" app:keyEdgeFlags="left"
app:keyIcon="@drawable/ic_emoji_emotions_outline_vector" app:keyIcon="@drawable/ic_emoji_emotions_outline_vector"
app:secondaryKeyIcon="@drawable/ic_language_outlined" app:keyWidth="10%p"
app:keyWidth="10%p" /> app:secondaryKeyIcon="@drawable/ic_language_outlined" />
<Key <Key
app:code="32" app:code="32"
app:isRepeatable="true" app:isRepeatable="true"
app:keyWidth="40%p" /> app:keyWidth="40%p" />
<Key <Key
app:keyLabel="." app:keyLabel="."
app:keyWidth="10%p"
app:popupCharacters=",?!;:…" app:popupCharacters=",?!;:…"
app:popupKeyboard="@xml/keyboard_popup_template" app:popupKeyboard="@xml/keyboard_popup_template" />
app:keyWidth="10%p" />
<Key <Key
app:code="-4" app:code="-4"
app:keyEdgeFlags="right" app:keyEdgeFlags="right"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto"> <Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row> <Row>
<Key <Key
app:keyEdgeFlags="left" app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto"> <Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row> <Row>
<Key <Key
app:keyEdgeFlags="left" app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto"> <Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row> <Row>
<Key <Key
app:keyEdgeFlags="left" app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto"> <Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row> <Row>
<Key <Key
app:keyEdgeFlags="left" app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto"> <Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row> <Row>
<Key <Key
app:keyEdgeFlags="left" app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto"> <Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row> <Row>
<Key <Key
app:keyEdgeFlags="left" app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto"> <Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row> <Row>
<Key <Key
app:keyEdgeFlags="left" app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto"> <Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row> <Row>
<Key <Key
app:keyEdgeFlags="left" app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto"> <Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row> <Row>
<Key <Key
app:keyEdgeFlags="left" app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto"> <Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row app:keyWidth="8.33%p"> <Row app:keyWidth="8.33%p">
<Key <Key
app:keyEdgeFlags="left" app:keyEdgeFlags="left"