# New in 8.1.28: Custom Touchscreen Keyboard Support

**URL:** <https://forum.inductiveautomation.com/t/new-in-8-1-28-custom-touchscreen-keyboard-support/72772>\
**Category:** Ignition\
**Tags:** vision\
**Created:** [April 21, 2023, 5:15pm UTC](https://forum.inductiveautomation.com/t/new-in-8-1-28-custom-touchscreen-keyboard-support/72772 "2023-04-21T17:15:54Z")\
**Posts on this page:** 1\
**Showing post:** 5

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [August 24, 2023, 10:03pm UTC](https://forum.inductiveautomation.com/t/new-in-8-1-28-custom-touchscreen-keyboard-support/72772/5 "2023-08-24T22:03:38Z")

</div>

No, not currently. As a short term stopgap, you could go through windows in the designer and recursively apply the layout you want using adapted code from this post:

> [@Upgrade version makes buttons dissapear (possible bug?)](https://forum.inductiveautomation.com/t/upgrade-version-makes-buttons-dissapear-possible-bug/54921/14):
>
> For anyone finding/being linked to this thread in the future; if you want a ‘middle ground’ solution between a global UI manager key and setting every button up with scripting, you could use a technique like this to recursively modify every button in the window (e.g. in visionWindowOpened): from javax.swing import AbstractButton from com.inductiveautomation.ignition.client.IgnitionLookAndFeel import setBlendMode from de.javasoft.plaf.synthetica.util.Synthetica2DUtils import BlendMode def getCo…

```python
from com.inductiveautomation.vision.api.client.components.touchscreen import TouchscreenMouseListener

def getComponents(window):
	def walkComponents(component):
		for component in component.components:
			yield component
			walkComponents(component)
	
	return walkComponents(window.rootContainer)
	
isTouchscreenComponent = lambda component: isinstance(component, TouchscreenMouseListener)

def setKeyboardLayout(component, layout):
	component.keyboardName = layout

win = system.gui.getWindow("WindowName")
for component in filter(isTouchscreenComponent, getComponents(win)):
	setKeyboardLayout(component, "en_us_compat")

```

---

_[View the full topic](https://forum.inductiveautomation.com/t/new-in-8-1-28-custom-touchscreen-keyboard-support/72772)._
