- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经扩展了 Android Sample SoftKeyboard 示例。这个扩展需要在键盘上方添加两个垂直的 AlphabetLinearLayouts(从 LinearLayout 扩展),除了 LatinKeyBoardView。 LatinKeyboardView 是标准键盘。
当我从我的布局中删除这两个侧 View 时,行为符合预期 - 在 EditText 内部选择会拉起软键盘,并且之前屏幕上的所有 View 都会向上移动。
通常当键盘以纵向弹出时,屏幕上的任何内容都会移动到键盘上方,有效地将一些内容推离屏幕以为键盘腾出空间。
我认为因为我有这两个额外的垂直 View 作为我键盘的一部分,所以框架试图将内容向上推但失败了,因为键盘 View 占用了太多空间。
我正在尝试找出解决此问题的方法。最好的情况是以某种方式让我的垂直 View 显示在原始内容之上,除了显示软键盘所需的内容之外没有进一步的位移。
我按如下方式构造我的 KeyboardView:
@Override public View onCreateInputView() {
RelativeLayout outer = (RelativeLayout) getLayoutInflater().inflate(
R.layout.input, null);
// Set up keyboard view.
mInputView = (LatinKeyboardView) outer.findViewById(R.id.keyboard);
mInputView.setOnKeyboardActionListener(this);
mInputView.setKeyboard(mQwertyKeyboard);
// Maintain reference to APC.
mAlphabetViewLeft = (AlphabetColumnLayout)outer.findViewById(R.id.alphabet_list_left);
mAlphabetViewRight = (AlphabetColumnLayout)outer.findViewById(R.id.alphabet_list_right);
// Set of references to handle touches.
mAlphabetViewLeft.setTouchResolver(mTouchResolver);
mAlphabetViewRight.setTouchResolver(mTouchResolver);
return outer;
}
我的 input.xml 文件如下所示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res/com.example.android.softkeyboard">
<com.example.android.softkeyboard.AlphabetColumnLayout
android:id="@+id/alphabet_list_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_above="@+id/keyboard"
android:orientation="vertical"
app:available_letters="BGHIJKLMNOPUVY"/>
<com.example.android.softkeyboard.AlphabetColumnLayout
android:id="@+id/alphabet_list_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_above="@+id/keyboard"
android:orientation="vertical"
app:available_letters="ACDEFQRSTWXZ"/>
<com.example.android.softkeyboard.LatinKeyboardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/keyboard"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
最后,我使用以下代码设置了 AlphabetColumnLayouts。它的作用是在键盘上方的屏幕两侧创建一堆字母(我上面提到的两个输入 View )。 AlphabetTextView 是一个普通的 TextView,带有一些额外的东西来帮助我以我想要的方式解决触摸问题。 char[] letters 使用 input.xml 中的 app:available_letters 样式实例化。
public void instantiateViews(char[] letters, int appSize) {
Context context = mWeakContext.get();
assertNotNull(context);
// Set up layout params of parent based on the screen size available,
// keeping XML-defined params.
RelativeLayout.LayoutParams lp =
(RelativeLayout.LayoutParams) getLayoutParams();
if (lp == null) {
lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
}
lp.height = appSize/2;
Log.e(TAG, "LinearLayout = " + lp.debug(""));
setLayoutParams(lp);
// Set up the child TextViews.
final int nLetters = letters.length;
for (char c : letters) {
AlphabetTextView tv = new AlphabetTextView(context, this);
LinearLayout.LayoutParams tlp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
lp.height/nLetters);
tv.setLayoutParams(tlp);
//tv.setGravity(Gravity.CENTER);
tv.setText(String.valueOf(c));
tv.setTextSize(12);
tv.setTypeface(Typeface.DEFAULT_BOLD);
// Add child to Layout.
addView(tv);
}
setOnTouchListener(this);
}
这是 a link我用一些附加图片发布的 Android Groups 问题。
最佳答案
您的描述不是很清楚。您实际上看到了什么是错误的?此外,您的描述听起来像是您想要创建自己的候选人版本?实现 onCreateCandidateViews()
是否满足您的需求?
更新
看了截图,我明白你的意思了。
我认为您本质上是在通往痛苦的道路上。您创建的是一个 KeyboardView
,其大小与 View
相同,其高度包括那些 TextView
列(不足为奇) .应用程序如何与输入法交互并不取决于输入法,而取决于应用程序本身。在这种情况下,消息应用似乎将其 android:windowSoftInputMode
设置为 adjustResize
(因此它“位于”您的 KeyboardView
之上方向更改 - 我不知道为什么当您的输入法首次显示时它不调整大小)。
此外,即使您确实设法让底层应用正常运行,您也会面临输入法可能从应用本身窃取触摸事件的问题(即您的 KeyboardView
仍然一个位于屏幕底部的矩形,无论那里的透明度如何。
从本质上讲,Android 的 IME 框架适用于将输入法作为单个 Root View ,它固定在 Dialog
中,并显示在屏幕底部。可能最近的框架变化已经偏离了这一点;添加了一个新的 Keyboard
构造器,它允许客户端指定宽度和高度,而不是仅仅假设 Key
大小百分比是屏幕宽度/高度。
无论如何,虽然它可能做其他事情,但 IME 必须做应用程序期望的事情,这是黄金法则,因为如果你的 IME 不能与用户的应用程序互操作,那么他们就不会使用
关于android - 自定义软键盘 View 显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12718602/
好的,所以我编辑了以下... 只需将以下内容放入我的 custom.css #rt-utility .rt-block {CODE HERE} 但是当我尝试改变... 与 #rt-sideslid
在表格 View 中,我有一个自定义单元格(在界面生成器中高度为 500)。在该单元格中,我有一个 Collection View ,我按 (10,10,10,10) 固定到边缘。但是在 tablev
对于我的无能,我很抱歉,但总的来说,我对 Cocoa、Swift 和面向对象编程还很陌生。我的主要来源是《Cocoa Programming for OS X》(第 5 版),以及 Apple 的充满
我正在使用 meta-tegra 为我的 NVIDIA Jetson Nano 构建自定义图像。我需要 PyTorch,但没有它的配方。我在设备上构建了 PyTorch,并将其打包到设备上的轮子中。现
在 jquery 中使用 $.POST 和 $.GET 时,有没有办法将自定义变量添加到 URL 并发送它们?我尝试了以下方法: $.ajax({type:"POST", url:"file.php?
Traefik 已经默认实现了很多中间件,可以满足大部分我们日常的需求,但是在实际工作中,用户仍然还是有自定义中间件的需求,为解决这个问题,官方推出了一个 Traefik Pilot[1] 的功
我想让我的 CustomTextInputLayout 将 Widget.MaterialComponents.TextInputLayout.OutlinedBox 作为默认样式,无需在 XML 中
我在 ~/.emacs 中有以下自定义函数: (defun xi-rgrep (term) (grep-compute-defaults) (interactive "sSearch Te
我有下表: 考虑到每个月的权重,我的目标是在 5 个月内分散 10,000 个单位。与 10,000 相邻的行是我最好的尝试(我在这上面花了几个小时)。黄色是我所追求的。 我试图用来计算的逻辑如下:计
我的表单中有一个字段,它是文件类型。当用户点击保存图标时,我想自然地将文件上传到服务器并将文件名保存在数据库中。我尝试通过回显文件名来测试它,但它似乎不起作用。另外,如何将文件名添加到数据库中?是在模
我有一个 python 脚本来发送电子邮件,它工作得很好,但问题是当我检查我的电子邮件收件箱时。 我希望该用户名是自定义用户名,而不是整个电子邮件地址。 最佳答案 发件人地址应该使用的格式是: You
我想减小 ggcorrplot 中标记的大小,并减少文本和绘图之间的空间。 library(ggcorrplot) data(mtcars) corr <- round(cor(mtcars), 1)
GTK+ noob 问题在这里: 是否可以自定义 GtkFileChooserButton 或 GtkFileChooserDialog 以删除“位置”部分(左侧)和顶部的“位置”输入框? 我实际上要
我正在尝试在主页上使用 ajax 在 magento 中使用 ajax 显示流行的产品列表,我可以为 5 或“N”个产品执行此操作,但我想要的是将分页工具栏与结果集一起添加. 这是我添加的以显示流行产
我正在尝试使用 PasswordResetForm 内置函数。 由于我想要自定义表单字段,因此我编写了自己的表单: class FpasswordForm(PasswordResetForm):
据我了解,新的 Angular 7 提供了拖放功能。我搜索了有关 DnD 的 Tree 组件,但没有找到与树相关的内容。 我在 Stackblitz 上找到的一个工作示例.对比drag'ndrop功能
我必须开发一个自定义选项卡控件并决定使用 WPF/XAML 创建它,因为我无论如何都打算学习它。完成后应该是这样的: 到目前为止,我取得了很好的进展,但还有两个问题: 只有第一个/最后一个标签项应该有
我要定制xtable用于导出到 LaTeX。我知道有些问题是关于 xtable在这里,但我找不到我要找的具体东西。 以下是我的表的外观示例: my.table <- data.frame(Specif
用ejs在这里显示日期 它给我结果 Tue Feb 02 2016 16:02:24 GMT+0530 (IST) 但是我需要表现为 19th January, 2016 如何在ejs中执行此操作?
我想问在 JavaFX 中使用自定义对象制作 ListView 的最佳方法,我想要一个每个项目如下所示的列表: 我搜了一下,发现大部分人都是用细胞工厂的方法来做的。有没有其他办法?例如使用客户 fxm
我是一名优秀的程序员,十分优秀!