我在Android布局中有一个EditTexts列表。每个都标有TextView,因此在纵向模式下不需要提示,并且提示甚至是多余的。但是,在横向模式下,许多人将键盘配置为全屏显示并隐藏应用程序,直到隐藏键盘并将输入注入所选视图:
如果您有一个EditText字段用于输入,这可能没问题,但是如果您有一个列表,则没有人在记录输入之前记住六个TextView标签。
如何设置仅在键盘处于提取ui模式时出现的提示 - 无论是横向还是纵向?
答案 0 :(得分:1)
我设法使用InputConnectionWrapper解决了这一问题,该输入连接具有用于进入全屏模式的显式回调。
/**
* [InputConnection] wrapper which applies hint text to
* the IME when entering fullscreen mode.
*/
class FullscreenHintInputConnection(
delegate: InputConnection,
private val editText: EditText,
private val hintText: CharSequence
) : InputConnectionWrapper(delegate, false) {
override fun reportFullscreenMode(enabled: Boolean): Boolean {
if (enabled) {
editText.hint = hintText
} else {
editText.hint = null
}
return super.reportFullscreenMode(enabled)
}
}
在EditText子类中:
override fun onCreateInputConnection(outAttrs: EditorInfo): InputConnection {
val connection = super.onCreateInputConnection(outAttrs)
return FullscreenHintInputConnection(connection, this, "Lorem ipsum")
}
尽管此解决方案有效,但值得注意的是AppCompat可以更优雅地完成此操作。该库修改了传递到onCreateInputConnection
中的EditorInfo参数,从而完全避免了InputConnectionWrapper子类。
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
return AppCompatHintHelper.onCreateInputConnection(
super.onCreateInputConnection(outAttrs),
outAttrs,
this
);
}
class AppCompatHintHelper {
static InputConnection onCreateInputConnection(InputConnection ic, EditorInfo outAttrs,
View view) {
if (ic != null && outAttrs.hintText == null) {
ViewParent parent = view.getParent();
while (parent instanceof View) {
if (parent instanceof WithHint) {
outAttrs.hintText = ((WithHint) parent).getHint();
break;
}
parent = parent.getParent();
}
}
return ic;
}
}
这用于将TextInputLayout提供的提示应用于基础TextInputEditText。其中一些API仅限于该库,因此您需要将它们复制到自己的项目中。但不幸的是,到目前为止,这种技术对我来说并不奏效,提示仍然是空白。