SoFunction
Updated on 2025-04-09

The problem of POPUP layout of android soft keyboard is solved

I'm developing a soft keyboard that does a great job, but I don't know how to customize a popup with a long key.

My keyboard view:

<?xml version="1.0" encoding="UTF-8"?>
<
xmlns:andro
android:
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:keyPreviewLayout="@layout/preview"
android:keyBackground="@drawable/key_selector"
android:shadowRadius="0.0"
android:keyTextColor="#000000"
/>

My keyboard layout:

<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:andro
android:keyWidth="10%p"
android:keyHeight="10%p">

<Row android:verticalGap="1%p" android:horizontalGap="0.5%p" android:keyHeight="8%p" android:keyWidth="9.6%p">
 <Key android:codes="113" android:keyLabel="q" />
 <Key android:codes="119" android:keyLabel="w" />
 <Key android:codes="101" android:keyLabel="e" 
  />
 <Key android:codes="114" android:keyLabel="r" />
 <Key android:codes="116" android:keyLabel="t" />
 <Key android:codes="121" android:keyLabel="y"
   android:popupKeyboard="@xml/keyboard_popup" android:popupCharacters="yýÿ"/>
 <Key android:codes="117" android:keyLabel="u"
   android:popupKeyboard="@xml/keyboard_popup" android:popupCharacters="uúùũûü"/>
 <Key android:codes="105" android:keyLabel="i" 
   android:popupKeyboard="@xml/keyboard_popup" android:popupCharacters="iíìĩîï"/>
 <Key android:codes="111" android:keyLabel="o" 
   android:popupKeyboard="@xml/keyboard_popup" android:popupCharacters="oóò ôö" />
 <Key android:codes="112" android:keyLabel="p" />
</Row>
<Row android:verticalGap="1%p" android:horizontalGap="0.5%p" android:keyHeight="8%p" android:keyWidth="9.6%p">
 <Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left" android:horizontalGap="5%p"
   android:popupKeyboard="@xml/keyboard_popup" android:popupCharacters="aáà âä"/>
 <Key android:codes="115" android:keyLabel="s" />
 <Key android:codes="100" android:keyLabel="d" />
 <Key android:codes="102" android:keyLabel="f" />
 <Key android:codes="103" android:keyLabel="g" />
 <Key android:codes="104" android:keyLabel="h" />
 <Key android:codes="106" android:keyLabel="j" />
 <Key android:codes="107" android:keyLabel="k" />
 <Key android:codes="108" android:keyLabel="l" />
</Row>
<Row android:verticalGap="1%p" android:horizontalGap="0.5%p" android:keyHeight="8%p" android:keyWidth="9.6%p">
 <Key android:codes="3"  android:keyIcon="@drawable/keyboard_shift_off" 
   android:keyHeight="7.6%p" android:keyWidth="13.7%p"/>
 <Key android:codes="122" android:keyLabel="z" android:horizontalGap="1%p"/>
 <Key android:codes="120" android:keyLabel="x" />
 <Key android:codes="99"  android:keyLabel="c"
   android:popupKeyboard="@xml/keyboard_popup" android:popupCharacters="cç"/>
 <Key android:codes="118" android:keyLabel="v" />
 <Key android:codes="98"  android:keyLabel="b" />
 <Key android:codes="110" android:keyLabel="n"
   android:popupKeyboard="@xml/keyboard_popup" android:popupCharacters="nñ"/>
 <Key android:codes="109" android:keyLabel="m" />
 <Key android:codes="-5"  android:keyIcon="@drawable/sym_keyboard_delete_dim"
  android:keyHeight="7.6%p" android:keyWidth="13.7%p" 
  android:horizontalGap="1%p"/>
</Row>
<Row android:verticalGap="1%p" android:horizontalGap="0.5%p" android:keyHeight="8%p" android:keyWidth="9.6%p">
 <Key android:codes="-16" android:keyIcon="@drawable/keyboard_symbol"
   android:keyHeight="7.6%p" android:keyWidth="18.7%p"/>
 <Key android:codes="44"  android:keyLabel="," android:horizontalGap="1%p"/>
 <Key android:codes="32"  android:keyIcon="@drawable/sym_keyboard_feedback_space" android:keyWidth="40%p"/>
 <Key android:codes="46"  android:keyLabel="."/>
 <Key android:codes="-3"  android:keyIcon="@drawable/keyboard_go" 
  android:keyHeight="7.6%p" android:keyWidth="18.5%p" android:horizontalGap="1%p"/>
</Row>

The keyboard pops up XML:

<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:andro
android:keyWidth="10%p"
android:keyHeight="10%p">
</Keyboard>

I tried to put the keyBackground and background properties anywhere, but it didn't work. I tried to put:

android:popupLayout="@layout/keyboard"

…get nullpointer on keyboardView, maybe I entered the wrong XML in that parameter?

In the keyboard pop-up XML I put here:

android:popupKeyboard="@xml/keyboard_popup"

I can change the size of the layout, key size, key spacing, etc. but not the color or background.

The key preview is also done well, I put it on the keyboardView:

android:keyPreviewLayout="@layout/preview"

...It works I think the popup should be the same, but not.

How to customize a pop-up window with long presses?

Then this is not what I'm looking for, but it solves this problem.

I created the keyboard view myself and a pop-up window pops up to show that a key is pressed for a long time.

public class MyKeyboardView extends KeyboardView{
 @Override
 protected boolean onLongPress(final Key popupKey) {
  final View custom = (context)
  .inflate(.popup_layout, new FrameLayout(context));
  popup = new PopupWindow(context);
  (.WRAP_CONTENT);
  (.WRAP_CONTENT);
  (this, Gravity.NO_GRAVITY, , -50);
 }
}

This way, you can customize the popup in any way in the xml.

But this is not the right answer, if you know a better way to answer this question.

/questions/34799775/soft-keyboards-popup-layout

The above is all the content of this article. I hope it will be helpful to everyone's study and I hope everyone will support me more.