Android Custom keyboard width changes on changing key sets

25 Views Asked by At

I'm trying to create a custom Android keyboard. Initially when the keyboard loads the keys layout is fine, But once I change to symbols the keypad width changes and the last keys are hidden. Even if I toggle to the same key set again I'm facing the same issue.

initial

after changing key set

keyboard_view.xml

<?xml version="1.0" encoding="utf-8"?>
<com.docbuddy.android.docbuddyvoice.keyboard.KeyboardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:paddingBottom="@dimen/spacing_medium"
    android:paddingTop="@dimen/spacing_small"
    android:background="#E7EAED"
    android:focusable="true"
    android:focusableInTouchMode="true"
    app:keyBackground="@drawable/key_background"
    app:keyPreviewOffset="0dp"
    app:keyTextColor="#000"
    app:keyTextSize="25sp"
    app:labelTextSize="25sp"
    />

alphabet_keys.xml

<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:horizontalGap="@dimen/horizontal_gap"
    app:keyHeight="@dimen/key_height"
    app:keyTextColor="@android:color/black"
    app:keyWidth="@dimen/key_width"
    app:verticalGap="@dimen/vertical_gap">
  <Row android:rowEdgeFlags="top">
    <Key
        app:codes="113"
        app:keyEdgeFlags="left"
        app:keyLabel="q" />
    <Key
        app:codes="119"
        app:keyLabel="w" />
    <Key
        app:codes="101"
        app:keyLabel="e" />
    <Key
        app:codes="114"
        app:keyLabel="r" />
    <Key
        app:codes="116"
        app:keyLabel="t" />
    <Key
        app:codes="121"
        app:keyLabel="y" />
    <Key
        app:codes="117"
        app:keyLabel="u" />
    <Key
        app:codes="105"
        app:keyLabel="i" />
    <Key
        app:codes="111"
        app:keyLabel="o" />
    <Key
        app:codes="112"
        app:keyEdgeFlags="right"
        app:keyLabel="p" />
  </Row>
  <Row>
    <Key
        app:codes="97"
        app:keyEdgeFlags="left"
        app:keyLabel="a" />
    <Key
        app:codes="115"
        app:keyLabel="s" />
    <Key
        app:codes="100"
        app:keyLabel="d" />
    <Key
        app:codes="102"
        app:keyLabel="f" />
    <Key
        app:codes="103"
        app:keyLabel="g" />
    <Key
        app:codes="104"
        app:keyLabel="h" />
    <Key
        app:codes="106"
        app:keyLabel="j" />
    <Key
        app:codes="107"
        app:keyLabel="k" />
    <Key
        app:codes="108"
        app:keyEdgeFlags="right"
        app:keyLabel="l" />
  </Row>
  <Row>
    <Key
        app:codes="-1"
        app:iconPreview="@drawable/ic_capslock"
        app:isModifier="true"
        app:isSticky="true"
        app:keyEdgeFlags="left"
        app:keyIcon="@drawable/ic_capslock"
        app:keyWidth="20%p" />
    <Key
        app:codes="122"
        app:keyLabel="z" />
    <Key
        app:codes="120"
        app:keyLabel="x" />
    <Key
        app:codes="99"
        app:keyLabel="c" />
    <Key
        app:codes="118"
        app:keyLabel="v" />
    <Key
        app:codes="98"
        app:keyLabel="b" />
    <Key
        app:codes="110"
        app:keyLabel="n" />
    <Key
        app:codes="109"
        app:keyLabel="m" />
    <Key
        app:codes="-5"
        app:iconPreview="@drawable/ic_backspace"
        app:isRepeatable="true"
        app:keyEdgeFlags="right"
        app:keyIcon="@drawable/ic_backspace"
        app:keyWidth="20%p" />
  </Row>
  <Row app:rowEdgeFlags="bottom">
    <Key
        app:codes="-7"
        app:isModifier="true"
        app:isSticky="true"
        app:keyEdgeFlags="left"
        app:keyLabel="\?123"
        app:keyWidth="15%p" />
    <Key
        app:codes="44"
        app:keyLabel=","
        app:keyWidth="10%p" />
    <Key
        app:codes="32"
        app:isRepeatable="true"
        app:keyWidth="50%p" />
    <Key
        app:codes="46"
        app:keyLabel="."
        app:keyWidth="10%p" />
    <Key
        app:codes="-4"
        app:iconPreview="@drawable/ic_done"
        app:keyEdgeFlags="right"
        app:keyIcon="@drawable/ic_done"
        app:keyWidth="15%p" />
  </Row>
</Keyboard>

symbol_keys.xml

<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:horizontalGap="@dimen/horizontal_gap"
    app:keyHeight="@dimen/key_height"
    app:keyTextColor="@android:color/black"
    app:keyWidth="@dimen/key_width"
    app:verticalGap="@dimen/vertical_gap">
  <Row android:rowEdgeFlags="top">
    <Key
        app:codes="49"
        app:keyEdgeFlags="left"
        app:keyLabel="1" />
    <Key
        app:codes="50"
        app:keyLabel="2" />
    <Key
        app:codes="51"
        app:keyLabel="3" />
    <Key
        app:codes="52"
        app:keyLabel="4" />
    <Key
        app:codes="53"
        app:keyLabel="5" />
    <Key
        app:codes="54"
        app:keyLabel="6" />
    <Key
        app:codes="55"
        app:keyLabel="7" />
    <Key
        app:codes="56"
        app:keyLabel="8" />
    <Key
        app:codes="57"
        app:keyLabel="9" />
    <Key
        app:codes="48"
        app:keyEdgeFlags="right"
        app:keyLabel="0" />
  </Row>
  <Row>
    <Key
        app:codes="64"
        app:keyEdgeFlags="left"
        app:keyLabel="\@" />
    <Key
        app:codes="35"
        app:keyLabel="\#" />
    <Key
        app:codes="36"
        app:keyLabel="$" />
    <Key
        app:codes="38"
        app:keyLabel="&amp;" />
    <Key
        app:codes="45"
        app:keyLabel="-" />
    <Key
        app:codes="43"
        app:keyLabel="+" />
    <Key
        app:codes="40"
        app:keyLabel="(" />
    <Key
        app:codes="41"
        app:keyLabel=")" />
    <Key
        app:codes="47"
        app:keyEdgeFlags="right"
        app:keyLabel="/" />
  </Row>
  <Row>
        <Key
            app:codes="-1"
            app:iconPreview="@drawable/ic_capslock"
            app:keyEdgeFlags="left"
            app:isModifier="true"
            app:keyIcon="@drawable/ic_capslock"
            app:isSticky="true"
            app:keyWidth="20%p" />

    <Key
        app:codes="42"
        app:keyLabel="*" />
    <Key
        app:codes="37"
        app:keyLabel="%" />
    <Key
        app:codes="34"
        app:keyLabel="&quot;" />
    <Key
        app:codes="58"
        app:keyLabel=":" />
    <Key
        app:codes="59"
        app:keyLabel=";" />
    <Key
        app:codes="33"
        app:keyLabel="!" />
    <Key
        app:codes="61"
        app:keyLabel="=" />
        <Key
            app:codes="-5"
            app:iconPreview="@drawable/ic_backspace"
            app:isRepeatable="true"
            app:keyEdgeFlags="right"
            app:keyIcon="@drawable/ic_backspace"
            app:keyWidth="20%p" />
  </Row>
  <Row app:rowEdgeFlags="bottom">
    <Key
        app:codes="-8"
        app:isModifier="true"
        app:isSticky="true"
        app:keyEdgeFlags="left"
        app:keyLabel="\ABC"
        app:keyWidth="15%p" />
    <Key
        app:codes="63"
        app:keyLabel="\?"
        app:keyWidth="10%p" />
    <Key
        app:codes="32"
        app:isRepeatable="true"
        app:keyWidth="50%p" />
    <Key
        app:codes="95"
        app:keyLabel="_"
        app:keyWidth="10%p" />
    <Key
        app:codes="-4"
        app:iconPreview="@drawable/ic_done"
        app:keyEdgeFlags="right"
        app:keyIcon="@drawable/ic_done"
        app:keyWidth="15%p" />
  </Row>
</Keyboard>

dimens.xml

  <dimen name="vertical_gap">8dp</dimen>
  <dimen name="horizontal_gap">3dp</dimen>
  <dimen name="key_height">50dp</dimen>
  <dimen name="key_width">10%p</dimen>

I change the keyboard by onKeyEvent

  case Keyboard.KEYCODE_SYMBOLS:
          keyboard = new Keyboard(this, R.xml.symbols_layout);
          keyboardView.setKeyboard(keyboard);
          break;
        case Keyboard.KEYCODE_ALPHABETS:
          keyboard = new Keyboard(this, R.xml.alphabets_layout);
          keyboardView.setKeyboard(keyboard);
0

There are 0 best solutions below