如何为 Android 中的应用程序制作自己的键盘?

2023-12-04

我目前正在开发一个需要不同语言(特别是希伯来语)键盘的应用程序。

问题是我不知道从哪里开始。我不希望用户必须进入应用程序商店并安装一个包含更多语言的单独应用程序才能使用我的应用程序。

我只希望键盘在我的应用程序中可用(即它不应该影响我的特定应用程序之外的任何内容)。我现在的做法是将其创建为主布局的一部分,并在用户单击“编辑文本”时使其可见。

这种方法的问题是我无法重新调整它的大小。我最初尝试使用 2 种不同的布局(一种在 res/layout 文件夹中,一种在 res/layout-lnd 文件夹中),但这在我的应用程序中引起了不同的问题,使其速度变慢。

我想知道两件事,其中任何一个都应该有效。

  1. 我将如何创建键盘布局以重新调整。
  2. 我该如何正确制作键盘。

以下是我使用的专门与键盘相关的 XML 代码:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  android:visibility="gone"
  android:background="@color/puzzle_dark"  
  android:id="@+id/hebrwKeyboardView"  
  android:layout_width="fill_parent"  
  android:layout_height="146dip"  
  android:layout_gravity="right|center_vertical|center_horizontal|bottom"  
  android:fitsSystemWindows="true"  
  android:clipChildren="false"  
  android:orientation="vertical" >  
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  android:layout_width="wrap_content"  
  android:layout_height="145dip"  
  android:clipChildren="false"  
  android:layout_gravity="center_vertical|center_horizontal|bottom"  
  android:fitsSystemWindows="true"  
  android:orientation="horizontal" >  
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  android:layout_width="fill_parent"  
  android:layout_height="145dip"  
  android:clipChildren="false"  
  android:layout_gravity="center_vertical|center_horizontal|bottom"  
  android:fitsSystemWindows="true"  
  android:orientation="vertical" >  
  <TableRow android:layout_width="fill_parent"  
  android:layout_height="fill_parent"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:fitsSystemWindows="true"  
  android:clipChildren="false"  
  android:orientation="horizontal"  
  android:stretchColumns="true">  
  <LinearLayout   
  android:baselineAligned="true"  
  android:layout_width="fill_parent"  
  android:layout_gravity="center"  
  android:layout_height="fill_parent"  
  android:fitsSystemWindows="true"  
  android:clipChildren="false"  
  android:orientation="horizontal">  
  <Button  
  android:id="@+id/KoofButton"  
  android:layout_width="wrap_content"  
  android:layout_height="35dip"  
  android:text="@string/Koof"  
  android:layout_gravity="center"  
  android:fitsSystemWindows="true"  
  android:ellipsize="marquee"/>  
  <Button  
  android:soundEffectsEnabled="true"  
  android:id="@+id/raishButton"  
  android:layout_width="wrap_content"  
  android:layout_height="35dip"  
  android:text="@string/Raish"  
  android:layout_gravity="center_horizontal"  
  android:fitsSystemWindows="true"  
  android:ellipsize="marquee"/>  
  <Button  
 android:soundEffectsEnabled="true"  
  android:id="@+id/alephButton"  
  android:layout_gravity="center_horizontal"  
  android:layout_width="wrap_content"  
  android:layout_height="35dip"  
  android:text="@string/Alef"  
  android:fitsSystemWindows="true"  
  android:ellipsize="marquee"/>  
  <Button  
android:soundEffectsEnabled="true"  
  android:id="@+id/tetButton"  
  android:layout_width="wrap_content"  
  android:layout_gravity="center_horizontal"  
  android:layout_height="35dip"  
  android:text="@string/Tet"  
  android:fitsSystemWindows="true"  
  android:ellipsize="marquee"/>  
  <Button  
android:soundEffectsEnabled="true"  
  android:id="@+id/vuvButton"  
  android:layout_width="wrap_content"  
  android:layout_height="35dip"  
  android:layout_gravity="center_horizontal"  
  android:text="@string/Vuv"  
  android:fitsSystemWindows="true"  
  android:ellipsize="marquee"/>  
  <Button  
android:soundEffectsEnabled="true"  
  android:id="@+id/nunSophitButton"  
  android:layout_width="wrap_content"  
  android:layout_height="35dip"  
  android:layout_gravity="center_horizontal"  
  android:text="@string/NunSofit"   
android:fitsSystemWindows="true"   
android:gravity="fill"   
android:ellipsize="marquee"/>  
  <Button  
 android:soundEffectsEnabled="true"  
  android:id="@+id/memSofitButton"  
  android:layout_width="wrap_content"  
  android:layout_gravity="center_horizontal"  
  android:layout_height="35dip"  
  android:text="@string/MemSofit"  
  android:fitsSystemWindows="true"  
  android:ellipsize="marquee"/>  
  <Button  
android:soundEffectsEnabled="true"  
  android:id="@+id/payButton"  
  android:layout_width="wrap_content"  
  android:layout_height="35dip"
  android:text="@string/Pay"  
  android:fitsSystemWindows="true"  
  android:layout_gravity="center_horizontal"  
  android:ellipsize="marquee"/>  
  </LinearLayout>  
  </TableRow>  
  <TableRow android:layout_width="fill_parent"  
  android:layout_height="fill_parent"  
  android:clipChildren="true"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:fitsSystemWindows="true"  
  android:orientation="horizontal">  
  <RelativeLayout android:layout_width="fill_parent"  
  android:clipChildren="true"  
  android:layout_height="fill_parent"  
  android:layout_gravity="center_horizontal|center"  
  android:gravity="bottom"  
  android:orientation="horizontal">  
  <Button  
  android:layout_alignWithParentIfMissing="true"  
 android:soundEffectsEnabled="true"  
  android:id="@+id/shinButton"  
  android:layout_width="wrap_content"  
  android:layout_centerHorizontal="true"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:layout_height="35dip"  
  android:text="@string/Shin"  
  android:layout_alignParentLeft="true"  
  android:fitsSystemWindows="true"
  />  
  <Button  
  android:layout_centerHorizontal="true"  
 android:soundEffectsEnabled="true"  
 android:layout_toRightOf="@id/shinButton"  
  android:id="@+id/dalidButton"  
  android:layout_width="wrap_content"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:layout_height="35dip"  
  android:text="@string/Dalid"  
  android:layout_alignWithParentIfMissing="true"  
  android:fitsSystemWindows="true"
  />  
  <Button  
  android:layout_alignWithParentIfMissing="true"  
  android:layout_centerHorizontal="true"  
android:soundEffectsEnabled="true"  
  android:id="@+id/gimleButton"  
  android:layout_toRightOf="@id/dalidButton"  
  android:layout_width="wrap_content"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:layout_height="35dip"  
  android:text="@string/Gimle"  
  android:fitsSystemWindows="true"
  />  
  <Button  
  android:layout_alignWithParentIfMissing="true"  
  android:layout_centerHorizontal="true"  
android:soundEffectsEnabled="true"  
  android:id="@+id/chufButton"  
  android:layout_toRightOf="@id/gimleButton"  
  android:layout_width="wrap_content"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:layout_height="35dip"  
  android:text="@string/Chuf"  
  android:fitsSystemWindows="true"
  />  
  <Button  
  android:layout_alignWithParentIfMissing="true"  
  android:layout_centerHorizontal="true"  
android:soundEffectsEnabled="true"  
  android:id="@+id/ieyinButton"  
  android:layout_toRightOf="@id/chufButton"  
  android:layout_width="wrap_content"  
  android:layout_height="35dip"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:text="@string/Ieyin"  
  android:fitsSystemWindows="true"
  />  
  <Button  
  android:layout_alignWithParentIfMissing="true"  
  android:layout_centerHorizontal="true"  
android:soundEffectsEnabled="true"  
  android:id="@+id/yudButton"  
  android:layout_toRightOf="@id/ieyinButton"  
  android:layout_width="wrap_content"  
  android:layout_height="35dip"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:text="@string/Yud"  
  android:fitsSystemWindows="true"
  />  
  <Button  
  android:layout_alignWithParentIfMissing="true"  
  android:layout_centerHorizontal="true"  
  android:soundEffectsEnabled="true"  
  android:id="@+id/chetButton"  
  android:layout_toRightOf="@id/yudButton"  
  android:layout_width="wrap_content"  
  android:layout_height="35dip"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:text="@string/Chet"  
  android:fitsSystemWindows="true"
  />  
  <Button  
  android:layout_alignWithParentIfMissing="true"  
  android:layout_centerHorizontal="true"  
android:soundEffectsEnabled="true"  
  android:id="@+id/lamidButton"  
  android:layout_toRightOf="@id/chetButton"  
  android:layout_width="wrap_content"  
  android:layout_height="35dip"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:text="@string/Lamid"  
  android:fitsSystemWindows="true"
  />  
  <Button  
  android:layout_alignWithParentIfMissing="true"  
  android:layout_centerHorizontal="true"  
  android:soundEffectsEnabled="true"  
  android:id="@+id/chufSofitButton"  
  android:layout_toRightOf="@id/lamidButton"  
  android:layout_width="wrap_content"  
  android:layout_height="35dip"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:text="@string/ChufSofit"  
  android:fitsSystemWindows="true"
  />  
  <Button  
  android:layout_alignWithParentIfMissing="true"  
  android:layout_centerHorizontal="true"  
  android:soundEffectsEnabled="true"  
  android:id="@+id/paySofitButton"  
  android:layout_toRightOf="@id/chufSofitButton"  
  android:layout_width="wrap_content"  
  android:layout_height="35dip"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:text="@string/PaySofit"  
  android:fitsSystemWindows="true"
  />  
  </RelativeLayout>  
  </TableRow>  
  <TableRow android:layout_width="fill_parent"  
  android:layout_height="fill_parent"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:fitsSystemWindows="true"  
  android:orientation="horizontal">  
  <LinearLayout android:layout_width="fill_parent"  
  android:layout_height="fill_parent"  
  android:layout_gravity="center_horizontal|center"  
  android:gravity="bottom"  
  android:orientation="horizontal">  
  <Button  
 android:soundEffectsEnabled="true"  
  android:id="@+id/zionButton"  
  android:layout_width="wrap_content"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:layout_height="35dip"  
  android:text="@string/Zion"  
  android:fitsSystemWindows="true"
  />  
  <Button  
android:soundEffectsEnabled="true"  
  android:id="@+id/samichButton"  
  android:layout_width="wrap_content"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:layout_height="35dip"  
  android:text="@string/Samich"  
  android:fitsSystemWindows="true"
  />  
  <Button  
android:soundEffectsEnabled="true"  
  android:id="@+id/betButton"  
  android:layout_width="wrap_content"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:layout_height="35dip"  
  android:text="@string/Bet"  
  android:fitsSystemWindows="true"
  />  
  <Button  
android:soundEffectsEnabled="true"  
  android:id="@+id/heyButton"  
  android:layout_width="wrap_content"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:layout_height="35dip"  
  android:text="@string/Hey"  
  android:fitsSystemWindows="true"
  />  
  <Button  
android:soundEffectsEnabled="true"  
  android:id="@+id/nunButton"  
  android:layout_width="wrap_content"  
  android:layout_height="35dip"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:text="@string/Nun"  
  android:fitsSystemWindows="true"
  />  
  <Button  
android:soundEffectsEnabled="true"  
  android:id="@+id/memButton"  
  android:layout_width="wrap_content"  
  android:layout_height="35dip"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:text="@string/Mem"  
  android:fitsSystemWindows="true"
  />  
  <Button  
android:soundEffectsEnabled="true"  
  android:id="@+id/tzadiButton"  
  android:layout_width="wrap_content"  
  android:layout_height="35dip"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:text="@string/Tzadi"  
  android:fitsSystemWindows="true"
  />  
  <Button  
android:soundEffectsEnabled="true"  
  android:id="@+id/tuffButton"  
  android:layout_width="wrap_content"  
  android:layout_height="35dip"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:text="@string/Tuff"  
  android:fitsSystemWindows="true"
  />  
  <Button  
  android:soundEffectsEnabled="true"  
  android:id="@+id/tzadiSofitButton"  
  android:layout_width="wrap_content"  
  android:layout_height="35dip"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:text="@string/TzadiSofit"  
  android:fitsSystemWindows="true"
  />  
  </LinearLayout>  
  </TableRow>  
  <TableRow android:layout_width="fill_parent"  
  android:layout_height="fill_parent"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:fitsSystemWindows="true"  
  android:orientation="horizontal">  
  <LinearLayout android:layout_width="fill_parent"  
  android:layout_height="fill_parent"  
  android:layout_gravity="center_horizontal|center"  
  android:gravity="bottom"  
  android:orientation="horizontal">  
  <Button  
android:soundEffectsEnabled="true"  
  android:id="@+id/hebrewBackButton"  
  android:layout_width="wrap_content"  
  android:layout_height="35dip"  
  android:layout_gravity="right"  
  android:fitsSystemWindows="true"  
   android:text="&lt;--"/>  
  <Button  
android:soundEffectsEnabled="true"  
  android:id="@+id/hebrewSpaceButton"  
  android:layout_width="150dip"  
  android:layout_height="35dip"  
  android:layout_gravity="center_horizontal|center_vertical|center"  
  android:text=""  
  android:fitsSystemWindows="true"
  />  
  <Button  
android:soundEffectsEnabled="true"  
  android:id="@+id/hebrewDoneButton"  
  android:layout_width="wrap_content"  
  android:layout_height="wrap_content"  
  android:layout_gravity="right"  
  android:text="Done"  
  android:fitsSystemWindows="true"
  />  
  </LinearLayout>  
  </TableRow>  
</TableLayout>
</TableLayout>
</FrameLayout>`

Here is a picture of what it looks like right now in portrait and landscape:
enter image description here

enter image description here


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 Android 中的应用程序制作自己的键盘? 的相关文章

随机推荐

  • 自动绑定模型中的 Polymer Dart $[] 选择器

    Since 聚合物体已被删除 我们需要使用自动结合模板来使用聚合物结合功能之外聚合物元件
  • Discord.py 如何添加静音命令

    我正在制作一个不和谐的机器人 我真的想制作一个静音命令来使有毒用户静音 这是我目前的代码done 这不是重写版本 bot command pass context True async def mute ctx user id userNa
  • Android onSearchRequested() 回调调用活动

    我有一个 MapActivity 当按下搜索按钮时 它将显示 Android 搜索框 SearchManager 管理该对话框 并将用户的查询传递给可搜索活动 该活动搜索 SQLite DB 并使用自定义适配器显示结果 这工作正常 我从显示
  • Ajax Accordion 失去当前窗格

    我正在使用带有多个窗格的 Ajax Accordion 在回发时 当前打开的窗格始终重置回第一个窗格 有什么办法可以解决这个问题吗 Thanks Rob 我通过在查询字符串中传递当前窗格索引 然后将当前窗格设置回目标页面的 Page Loa
  • 实体框架 v6 GroupBy 丢失原始排序

    我有一个查询的以下部分 这是一个更大的查询的结尾 queryBuilder 是一个 IQueryable var results queryBuilder OrderBy x gt x Vehicle RangeId ThenBy x gt
  • arraylist 的副本不断被修改为原始值

    我正在开发一个用于保存和调用屏幕状态的系统 这是我第一次搞乱这种东西 所以我不太确定最好的方法是什么 但我目前存储了所有的 PreviewMonitor 数组列表内的对象 大约 40 个左右 问题是 当我创建一个名为 allPreviewM
  • String.Replace() 与 StringBuilder.Replace()

    我有一个字符串 需要用字典中的值替换标记 它必须尽可能高效 使用 string replace 进行循环只会消耗内存 记住 字符串是不可变的 StringBuilder Replace 是为了处理字符串操作而设计的吗 我希望避免 RegEx
  • 在 iPhone 上打开热点导致我的应用程序的屏幕向下移动

    当我在 iPhone 中打开人员热点时 我的应用程序的屏幕会向下移动 我正在其中加载子视图 但在其他屏幕上它不会发生 它仅发生在我正在加载子视图的屏幕上 那么有人能告诉我可能是什么问题吗 任何帮助将不胜感激 每当出现热点或其他通知时 sta
  • 如何使用 Java 查找 HTML 中的 URL

    我有以下问题 我不会说问题 而是情况 我有一些带有标签和所有内容的 HTML 我想在 HTML 中搜索每个 URL 我现在通过检查 h t t p 的位置来做到这一点 但我认为这不是一个很好的解决方案 有什么好主意吗 补充 我正在寻找某种伪
  • List 的 Xamarin 列表视图

    我正在制作一个移动应用程序 并尝试在列表视图中加载列表 该列表有多个元素和一个列表 public static List
  • 当应用程序在 macOS 上关闭时,在 @EnvironmentObject 上迭代数组

    我有一个 EnvironmentObject它为我的主视图提供了一个数组 其声明如下 my app swift main struct My AppApp App var body some Scene WindowGroup Conten
  • 故事板身份检查器中未显示自定义类

    我在我的应用程序中创建了一个名为的新类EmpresasTableViewController 并在故事板中我复制了CategoriasViewController到 EmpresasTableViewController 我只想分配该类Em
  • ADFS 的 SSO 的 SAML 错误 - MSIS0038:SAML 消息签名错误

    您好 我正在尝试使用 SSO 直接对我的网站的客户用户进行身份验证 我客户的 IDP 是 Microsoft ADFS 我正在使用 Passport SAML https github com bergie passport saml 配置
  • 看不见的向量?组合 d3.tile()、d3.zoom() 和 TopoJSON 向量

    我已经使用栅格制作了有效的 D3 地图 d3 tile和地图库 和矢量 SVG 形状中的 TopoJSON 但当我将它们组合起来时 我遇到了一个错误 我遵循了 Mike Bostock 的光栅和矢量示例 尤其是他的 光栅与矢量 III 它会
  • 安装 mongodb 版本 >3 树莓派 2

    是否可以在树莓派上安装大于 3 2 的 mongodb 版本 并在树莓派上安装 RASPBIAN JESSIE LITE 我使用本教程只成功获得了 2 1 版本 http www widriksson com install mongodb
  • Android HttpClient 通过 USB 向主机发送请求

    我有一个在通过 USB 连接到主机的手机上运行的 Android 应用程序 手机将始终连接到机器 我需要向机器发出 HTTP 请求 在模拟器中工作 我可以使用 IP 地址 10 0 2 2 访问计算机上运行的网络服务器 并且工作正常 但是在
  • 为什么 Perl 正则表达式 \K 不排除 \K 之前匹配的模式?

    我有一个名为 test txt 的文件 其中包含以下内容 gt Last login Mon Jul 13 05 09 33 2020 You have mail gt gt cat you have just logged into ma
  • EditText 脱离 GridLayout

    我正在尝试创建一个带有 EditText 和关联标签的视图 我将它们放在 GridLayout 中 EditText 位于最后一列 文本似乎超出了屏幕
  • 安全警告:“请像对待密码一样对待上面的 URL,并且不要与任何人共享。在 ios 中

    我正在开发包含 Facebook 登录的应用程序 使用 Facebook 登录后 我需要转到本机应用程序 应用程序应该显示 Facebook 中的用户名和图像 但是当我使用 Facebook 登录时 它显示 安全警告 请像对待密码一样对待上
  • 如何为 Android 中的应用程序制作自己的键盘?

    我目前正在开发一个需要不同语言 特别是希伯来语 键盘的应用程序 问题是我不知道从哪里开始 我不希望用户必须进入应用程序商店并安装一个包含更多语言的单独应用程序才能使用我的应用程序 我只希望键盘在我的应用程序中可用 即它不应该影响我的特定应用