我正在开发一个自定义键盘,并希望在键盘上方添加TextView
以显示用户已输入的内容或他想要输入的字词的建议。
要做到这一点,我有以下布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<android.inputmethodservice.KeyboardView
android:id="@+id/keyboard"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:keyPreviewLayout="@layout/preview"
android:keyBackground="@drawable/key_background"
android:background="@color/color_primary"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/keyboard"
android:padding="8dp"
android:gravity="center"
android:background="@color/color_primary_dark"
android:textColor="@android:color/white"
android:text="some sample text"
/>
</RelativeLayout>
以及InputMethodService
上的以下代码:
public class FancyInputMethodService extends InputMethodService {
@Override
public View onCreateInputView() {
final RelativeLayout layout = (RelativeLayout) getLayoutInflater().inflate(R.layout.keyboard_layout, null);
final KeyboardView keyboardView = (KeyboardView) layout.findViewById(R.id.keyboard);
final Keyboard keyboard = new Keyboard(this, R.xml.qwerty);
keyboardView.setKeyboard(keyboard);
return layout;
}
}
在屏幕顶部的正常EditText
处,键盘看起来很好并且效果很好:
但如果EditText
位于使用清单中的标记Activity
的{{1}}中,则键盘视图似乎覆盖实际视图而不是透明。
左图显示软键盘关闭时的实际视图,中间的图像显示键盘打开时的奇怪行为,右侧的图像显示默认键盘,表现出我期望的行为。
我已经尝试将布局背景设置为透明,但这没有帮助。
问题出现在多个应用中,例如WhatsApp,Hangouts,Facebook等......我错过了什么或者出了什么问题?
答案 0 :(得分:0)
tl; dr
您没有按预期使用InputMethodService,而是使用CandidateView框架。
完整答案:
您的键盘布局不应包含文字建议。
覆盖InputMethodService#onCreateCandidatesView。它应该是这样的:
public View onCreateCandidatesView(){
mYourView = getLayoutInflater().inflate(R.layout.your_view, null);
return mYourView;
}
3。当您想要显示/隐藏候选视图时,请使用setCandidatesViewShown(boolean show)