{"id":4873,"date":"2024-04-24T11:13:11","date_gmt":"2024-04-24T18:13:11","guid":{"rendered":"https:\/\/portal.staylinked.com\/sl\/kb\/?post_type=ht_kb&#038;p=4873"},"modified":"2026-04-13T15:05:07","modified_gmt":"2026-04-13T22:05:07","slug":"custom-keyboard-guide","status":"publish","type":"ht_kb","link":"https:\/\/portal.staylinked.com\/sl\/kb\/knowledge-base\/custom-keyboard-guide\/","title":{"rendered":"Custom Keyboard Guide"},"content":{"rendered":"\n<p>Android Clients version 15.4 build 244 and newer offer support for a custom keyboard design. <\/p>\n\n\n\n<p>Custom keyboards differ from <a href=\"https:\/\/portal.staylinked.com\/sl\/kb\/knowledge-base\/smart-keyboard-style-guide\/\">Smart Keyboard<\/a> and <a href=\"https:\/\/portal.staylinked.com\/sl\/kb\/knowledge-base\/smarttiles-feature-overview\/\">SmartTiles<\/a> by utilizing the android keyboard framework to load and process an XML-based keyboard file when the client is initially launched. Build 246 adds sizing support for text, icon, and graphics.<\/p>\n\n\n\n<p>Custom keyboards have a variety of options, including: button size and positioning, key colors, text colors, and support for font glyphs.<\/p>\n\n\n\n<p>Each of the 5 Smart Keyboard panels\/types (QWERTY, Number Pad, Number Symbol, Control, and Function Keys) can have their own custom keyboard XML file. Once options are set to use the custom keyboard, the application searches for the appropriate XML definition file in the local StayLinked file directory system on the device (\/files\/keyboards). <\/p>\n\n\n\n<p>Additional custom keyboards can be specified by Screen Recognition events starting with<strong> server version 16.2 <\/strong>under the Host API tab in a recognition event.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"510\" height=\"252\" src=\"https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2026\/02\/image-2.png\" alt=\"\" class=\"wp-image-5894\" srcset=\"https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2026\/02\/image-2.png 510w, https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2026\/02\/image-2-300x148.png 300w, https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2026\/02\/image-2-50x25.png 50w, https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2026\/02\/image-2-60x30.png 60w, https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2026\/02\/image-2-100x49.png 100w\" sizes=\"(max-width: 510px) 100vw, 510px\" \/><figcaption>These API events do not need to match any of the five standard keyboard names.<\/figcaption><\/figure>\n\n\n\n<p>These XML files must be named as follows and located within the current client working directory and subdirectory for your device model and operating system:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Panel<\/strong><\/td><td><strong>File Name<\/strong><\/td><\/tr><tr><td>QWERTY<\/td><td>custom_qwerty.xml<\/td><\/tr><tr><td>Number Pad<\/td><td>custom_numpad.xml<\/td><\/tr><tr><td>Number Symbol<\/td><td>custom_numsym.xml<\/td><\/tr><tr><td>Control<\/td><td>custom_control.xml<\/td><\/tr><tr><td>Function Keys<\/td><td>custom_function.xml<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Clients will utilize the default keyboard style for that keyboard panel in the event of an invalid or missing XML file.<\/p>\n\n\n\n<p>There are three parts to creating and using a custom keyboard.<\/p>\n\n\n\n<ol type=\"1\"><li>Create an XML file to define the keyboard design.<\/li><li>Place the XML file in the proper location in the device file system.<\/li><li>Enable the custom option for each desired keyboard panel.<\/li><\/ol>\n\n\n\n<h2>Creating your custom keyboard XML file<\/h2>\n\n\n\n<p>The custom keyboard XML files follow standard Android keyboard XML formatting and options but include a few additions. You can search for current Android standards for customer keyboards online for additional details.<\/p>\n\n\n\n<h3>Sample Files<\/h3>\n\n\n\n<p>We have a few sample files that can be found here:<br><a href=\"https:\/\/portal.StayLinked.com\/Files\/Sample_KB_XML.zip\">https:\/\/portal.StayLinked.com\/Files\/Sample_KB_XML.zip<\/a><\/p>\n\n\n\n<p>Unzip these files and place the desired file on the device in the current StayLinked working directory and \/keyboards subdirectory as described in the section about distributing these XML files below. As long as the file name and location are correct, using the Custom option for the matching SmartKeyboard panel will result in use of the example keyboard.<\/p>\n\n\n\n<p>Because we use Google's standard formatting, you may be able to find various other examples online.<\/p>\n\n\n\n<h2>Custom XML Attributes<\/h2>\n\n\n\n<p>Additional attributes supported by the StayLinked custom keyboard feature are as follows:<\/p>\n\n\n\n<h3>Keyboard<\/h3>\n\n\n\n<p>All attributes listed at the Keyboard level apply to all rows and keys defined in the file unless otherwise specified at the lower level.<\/p>\n\n\n\n<p>Available custom keyboard attributes are:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Attribute Tag<\/strong><\/td><td><strong>Description<\/strong><\/td><td><strong>Values<\/strong><\/td><\/tr><tr><td>android:landscapeKeyHeight<\/td><td>Setting for customizing key heights specifically when the device is in landscape orientation. If this is not defined, the custom keyboard will default to using the android:keyHeight attribute settings to match portrait mode<\/td><td>Any standard dimension or fractional reference including dimensional references<br>Ex.<br>'@dimen\/keyHeight\"<br><\/td><\/tr><tr><td>android:keyboardBackground<\/td><td>Color of the keyboard background seen behind the keys<\/td><td>Hexadecimal color key code prefaced with \"#\"<br>Ex.<br>\"#FF332211\"<br>\"#444444\"<\/td><\/tr><tr><td>android:keyBackground<\/td><td>Color or drawable key background (applies to all keys unless otherwise overwritten)<\/td><td>Drawable reference<br>Ex.<br>\"@drawable\/default_key_background\"<br>Or<br> Hexadecimal color key code prefaced with \"#\"<br>Ex.<br>\"#FF332211\"<br>\"#444444\"<\/td><\/tr><tr><td>android:keyTextColor<\/td><td>Text color of the key (applies to all keys unless otherwise overwritten)<\/td><td>Hexadecimal color key code prefaced with \"#\"<br>Ex.<br>\"#FF332211\"<br>\"#444444\"<\/td><\/tr><tr><td>android:textSize<\/td><td>Key text\/icons\/drawables default to a size based on the pixel density of the device. The textSize attribute can be used to override the default sizing and customize the font within keys.<\/td><td>Any standard dimension or fractional reference including dimensional references<br>Ex.<br>\"@dimen\/keyHeight\"<br>\"40dip\"<br>\"40dp\"<br>\"40%p\"<br>\"40px\"<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3>Row<\/h3>\n\n\n\n<p>Row attributes override the corresponding base keyboard attributes. They apply to all keys in the row unless otherwise specified at the key level.<\/p>\n\n\n\n<p>Available custom row attributes are:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Attribute Tag<\/strong><\/td><td><strong>Description<\/strong><\/td><td><strong>Values<\/strong><\/td><\/tr><tr><td>android:keyBackground<\/td><td>Color or drawble key background (applies to all keys unless otherwise overwritten)<\/td><td>Drawable reference<br>Ex.<br>\"@drawable\/default_key_background\"<br>Or<br>Hexadecimal color key code prefaced with \"#\"<br>Ex.<br>\"#FF332211\"<br>\"#444444\"<\/td><\/tr><tr><td>android:keyTextColor<\/td><td>Text color of the key (applies to allkeys unless otherwise overwritten)<\/td><td>Hexadecimal color key code prefaced with \"#\"<br>Ex.<br>\"#FF332211\"<br>\"444444\"<\/td><\/tr><tr><td>android:textSize<\/td><td>Key text\/icons\/drawables default to a size based on teh pixel density fo the device. The textSize attribute can be used to override the default sizing and customize the font within keys.<\/td><td>Any standard dimension or fractional reference including dimensional references<br>Ex.<br>\"@dimen\/keyHeight\"<br>\"40dip\"<br>\"40dp\"<br>\"40%p\"<br>\"40px\"<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3>Key<\/h3>\n\n\n\n<p>Key attributes override any parent attributes. They only apply to the key that they are specified for.<\/p>\n\n\n\n<p>Available custom key attributes are:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Attribute Tag<\/strong><\/td><td><strong>Description<\/strong><\/td><td><strong>Value<\/strong><\/td><\/tr><tr><td>android:keyBackground<\/td><td>Color or drawable key background (applies to all keys unless otherwise overwritten)<\/td><td>Drawable reference<br>Ex.<br>\"@drawable\/default_key_background\"<br>Or<br>Hexadecimal color key code prefaced with \"#\"<br>Ex.<br>\"#FF332211\"<br>\"#444444\"<\/td><\/tr><tr><td>android:keyTextColor<\/td><td>Text color of the key (applies to all keys unless otherwise overwritten)<\/td><td>Hexadecimal color key code prefaced with \"#\"<br>Ex.<br>\"#FF332211\"<br>\"#444444\"<\/td><\/tr><tr><td>android:keycode<\/td><td>Six-digit hex keycode for the key. This must be six digits in hex format.<br>The keycode takes precedence over the android:codes attribute.<br>Meaning that if both are defined, the codes attribute will get ignored.<\/td><td>Hexadecimal key code to be used by the keyboard.<br>First two digits represent the scan code<br>Second two digits represent the ASCII code<br>Third two digits represent modifier flags (shift = 0x01, ctrl = 0x02, alt = 0x04, function = 0x08)<br>Ex.<br>\"686800\"<br>Scan Code: 104<br>ASCII Code: 104<br>ASCII Char: h<br>Shift key: false<br>Ctrl key: false<br>Alt key: false<br>Func key: false<br>Ex.<br>\"646402\"<br>Scan Code: 100<br>ASCII Code: 100<br>ASCII Char: d<br>Shift key: false<br>Ctrl key: true<br>Alt key: false<br>Func key: false<\/td><\/tr><tr><td>android:textSize<\/td><td>Key text\/icons\/drawables default to a size based on the pixel density of the device. The textSize attribute can be used to override the default sizing and customize the font within keys.<\/td><td>Any standard dimension or fractional reference including dimensional references<br>Ex.<br>\"@dim\/keyHeight\"<br>\"40dip\"<br>\"40dp\"<br>\"40%p\"<br>\"40px\"<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Additionally, key text supports both Unicode and custom text glyphs. Special codes must be used to activate these glyphs\/characters.<\/p>\n\n\n\n<h3>Unicode<\/h3>\n\n\n\n<p>Unicode characters should be prefaced with <strong>\\u<\/strong> followed by the associated Unicode number for the image.<\/p>\n\n\n\n<p>Examples &#8211; <strong>\"\\u2191\"<\/strong> or <strong>\"\\u2193\"<\/strong><\/p>\n\n\n\n<p>Refer to standard Unicode definitions for supported Unicode characters: <a href=\"https:\/\/www.compart.com\/en\/unicode\">https:\/\/www.compart.com\/en\/unicode<\/a><\/p>\n\n\n\n<h3>Fonts<\/h3>\n\n\n\n<p>Font characters should be prefaced with <strong>&amp;amp;#x<\/strong> and end with a <strong>;<\/strong><\/p>\n\n\n\n<p>Several custom fonts are built into StayLinked services including fontawesome.ttf, fontawesome5.ttf, and the custom staylinked.ttf. These standard files can be utilized from the client\u2019s \u2018fonts\u2019 subdirectory.<\/p>\n\n\n\n<p>Refer to fontawesome charts for default icon values: <a href=\"https:\/\/fontawesome.com\/v5\/cheatsheet#use\">https:\/\/fontawesome.com\/v5\/cheatsheet#use<\/a><\/p>\n\n\n\n<p>Examples &#8211;&nbsp; <strong>\"&amp;amp;#xf06C;\"<\/strong>, <strong>\"&amp;amp;#xf024;\"<\/strong><\/p>\n\n\n\n<p><strong>Note: When using Unicode or Font specifications with keys, the attribute \u201candroid:codes\u201d should also be set to specify which key codes the Unicode or Font icon represents to the system.<\/strong><\/p>\n\n\n\n<h2>Distributing XML Files to Devices<\/h2>\n\n\n\n<p>These custom XML files can be sent to the device directly from the StayLinked Administrator\u2019s Connections List or through Client Settings. They can also be placed on the device manually, but this becomes difficult with newer versions of the Android Operating System.<\/p>\n\n\n\n<h3>From the Connections List<\/h3>\n\n\n\n<p>Files can be sent to a device from the Connections List by dragging and dropping the file from the Windows Desktop to the desired device (if Windows permissions allow). The client must be connected to the StayLinked Server and communicated with the server recently enough to prevent radio power management from disabling the radio.<\/p>\n\n\n\n<p>In the <strong>Remote File Name<\/strong> section, be sure to preface the file name with keyboards for this specific subdirectory:<\/p>\n\n\n\n<ol type=\"1\"><li>QWERTY \u2013 keyboards\/custom_qwerty.xml<\/li><li>Number Pad \u2013 keyboards\/custom_numpad.xml<\/li><li>Number Symbol \u2013 keyboards\/custom_numsym.xml<\/li><li>Control \u2013 keyboards\/custom_control.xml<\/li><li>Function \u2013 keyboards\/custom_function.xml<\/li><\/ol>\n\n\n\n<p>Files in the wrong directory will not be recognized or utilized.<\/p>\n\n\n\n<p>Optionally files could be added manually to devices third-party tools. This is not recommended due to potential ownership and permissions challenges.<\/p>\n\n\n\n<h3>From Configuration File Transfer<\/h3>\n\n\n\n<p>Using Client Settings, a setting could be created using the setting Configuration File Transfer. This setting is under the Client group and the remote file name must match one of the values as listed above. Client Settings are described in more detail here: <a href=\"https:\/\/portal.staylinked.com\/sl\/kb\/knowledge-base\/client-administration\/\">Client Settings<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"340\" height=\"435\" src=\"https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/05\/image-1.png\" alt=\"\" class=\"wp-image-4897\" srcset=\"https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/05\/image-1.png 340w, https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/05\/image-1-234x300.png 234w, https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/05\/image-1-39x50.png 39w, https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/05\/image-1-47x60.png 47w, https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/05\/image-1-78x100.png 78w\" sizes=\"(max-width: 340px) 100vw, 340px\" \/><\/figure>\n\n\n\n<h2>Enable the Custom option for each desired Smart Keyboard Panel<\/h2>\n\n\n\n<p>There are two recommended methods of enabling the custom option for each keyboard type:<\/p>\n\n\n\n<h3>Method 1: Within the Client configuration on your device<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"337\" height=\"355\" src=\"https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/04\/CustomKeyboard_1.01and1.02.png\" alt=\"\" class=\"wp-image-4879\" srcset=\"https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/04\/CustomKeyboard_1.01and1.02.png 337w, https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/04\/CustomKeyboard_1.01and1.02-285x300.png 285w, https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/04\/CustomKeyboard_1.01and1.02-47x50.png 47w, https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/04\/CustomKeyboard_1.01and1.02-57x60.png 57w, https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/04\/CustomKeyboard_1.01and1.02-95x100.png 95w\" sizes=\"(max-width: 337px) 100vw, 337px\" \/><\/figure>\n\n\n\n<p>From the Client splash screen, select Host &gt; Configure.<\/p>\n\n\n\n<ul><li>If the menu bar is hidden, a long tap on the device screen should toggle the display of the menu bar.<\/li><li>Note \u2013 Configure is not accessible while within a session. The client must be on the splash screen for Configure to be listed as an option under the Host menu.<\/li><\/ul>\n\n\n\n<p>Enter the client configuration password (default is esp) and select Smart Keyboard. Within Smart Keyboard, you can select Custom as the type for any of the five different keyboard panels. Hit the Android Back button when your selections have been made to save your changes.<\/p>\n\n\n\n<h3>Method 2: Use Client Settings within the StayLinked Administrator<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"625\" height=\"98\" src=\"https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/04\/CustomKeyboard_1.03.png\" alt=\"\" class=\"wp-image-4877\" srcset=\"https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/04\/CustomKeyboard_1.03.png 625w, https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/04\/CustomKeyboard_1.03-300x47.png 300w, https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/04\/CustomKeyboard_1.03-50x8.png 50w, https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/04\/CustomKeyboard_1.03-60x9.png 60w, https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/04\/CustomKeyboard_1.03-100x16.png 100w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/figure>\n\n\n\n<p>The StayLinked Administrator includes a section under Client Configuration for Client Settings. If you\u2019re using Client Settings, you\u2019ll likely need one setting for each of the desired keyboard panels plus an additional setting for each of the custom XML files.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2024\/04\/CustomKeyboard_1.04.png\" alt=\"This image has an empty alt attribute; its file name is CustomKeyboard_1.04.png\"\/><\/figure>\n\n\n\n<p>To set the panels to custom, you can add a new setting under the section \u201cScanner and Keyboard\u201d for any or each of the desired styles. Setting the value to custom would be the same as setting the value at the device. More information about Client Settings can be found in the documentation section of the same name. Note that Client settings are only applied on a new session, or when pushed from the context menus of the Connections List.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Android Clients version 15.4 build 244 and newer offer support for a custom keyboard design. Custom keyboards differ from Smart Keyboard and SmartTiles by utilizing the android keyboard framework to load and process an XML-based keyboard file when the client is initially launched. Build 246 adds sizing support for text,&#8230;<\/p>\n","protected":false},"author":7,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":[],"ht-kb-category":[57],"ht-kb-tag":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Custom Keyboard Guide &ndash; StayLinked<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.staylinked.com\/knowledge-base\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Custom Keyboard Guide &ndash; StayLinked\" \/>\n<meta property=\"og:description\" content=\"Android Clients version 15.4 build 244 and newer offer support for a custom keyboard design. Custom keyboards differ from Smart Keyboard and SmartTiles by utilizing the android keyboard framework to load and process an XML-based keyboard file when the client is initially launched. Build 246 adds sizing support for text,...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/portal.staylinked.com\/sl\/kb\/knowledge-base\/custom-keyboard-guide\/\" \/>\n<meta property=\"og:site_name\" content=\"StayLinked\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-13T22:05:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2026\/02\/image-2.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/portal.staylinked.com\/sl\/kb\/#website\",\"url\":\"https:\/\/portal.staylinked.com\/sl\/kb\/\",\"name\":\"StayLinked Knowledge Base\",\"description\":\"Partner Portal Resources and Support\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/portal.staylinked.com\/sl\/kb\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/portal.staylinked.com\/sl\/kb\/knowledge-base\/custom-keyboard-guide\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2026\/02\/image-2.png\",\"contentUrl\":\"https:\/\/portal.staylinked.com\/sl\/kb\/wp-content\/uploads\/2026\/02\/image-2.png\",\"width\":510,\"height\":252},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/portal.staylinked.com\/sl\/kb\/knowledge-base\/custom-keyboard-guide\/#webpage\",\"url\":\"https:\/\/portal.staylinked.com\/sl\/kb\/knowledge-base\/custom-keyboard-guide\/\",\"name\":\"Custom Keyboard Guide &ndash; StayLinked\",\"isPartOf\":{\"@id\":\"https:\/\/portal.staylinked.com\/sl\/kb\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/portal.staylinked.com\/sl\/kb\/knowledge-base\/custom-keyboard-guide\/#primaryimage\"},\"datePublished\":\"2024-04-24T18:13:11+00:00\",\"dateModified\":\"2026-04-13T22:05:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/portal.staylinked.com\/sl\/kb\/knowledge-base\/custom-keyboard-guide\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/portal.staylinked.com\/sl\/kb\/knowledge-base\/custom-keyboard-guide\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/portal.staylinked.com\/sl\/kb\/knowledge-base\/custom-keyboard-guide\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/portal.staylinked.com\/sl\/kb\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Articles\",\"item\":\"https:\/\/portal.staylinked.com\/sl\/kb\/knowledge-base\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Custom Keyboard Guide\"}]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/portal.staylinked.com\/sl\/kb\/wp-json\/wp\/v2\/ht-kb\/4873"}],"collection":[{"href":"https:\/\/portal.staylinked.com\/sl\/kb\/wp-json\/wp\/v2\/ht-kb"}],"about":[{"href":"https:\/\/portal.staylinked.com\/sl\/kb\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/portal.staylinked.com\/sl\/kb\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/portal.staylinked.com\/sl\/kb\/wp-json\/wp\/v2\/comments?post=4873"}],"version-history":[{"count":12,"href":"https:\/\/portal.staylinked.com\/sl\/kb\/wp-json\/wp\/v2\/ht-kb\/4873\/revisions"}],"predecessor-version":[{"id":5949,"href":"https:\/\/portal.staylinked.com\/sl\/kb\/wp-json\/wp\/v2\/ht-kb\/4873\/revisions\/5949"}],"wp:attachment":[{"href":"https:\/\/portal.staylinked.com\/sl\/kb\/wp-json\/wp\/v2\/media?parent=4873"}],"wp:term":[{"taxonomy":"ht_kb_category","embeddable":true,"href":"https:\/\/portal.staylinked.com\/sl\/kb\/wp-json\/wp\/v2\/ht-kb-category?post=4873"},{"taxonomy":"ht_kb_tag","embeddable":true,"href":"https:\/\/portal.staylinked.com\/sl\/kb\/wp-json\/wp\/v2\/ht-kb-tag?post=4873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}