使用自定义键盘中可见的候选视图重新调整UI

时间:2012-08-07 06:45:56

标签: android android-softkeyboard

我正在使用自定义键盘。我在onCreateCandidatesView()中设置了setCandidatesViewShown(true)函数,问题是UI没有得到正确的重新调整。

任何帮助都会很棒。以下就是我所做的

@Override 
public View onCreateCandidatesView() {      

    LayoutInflater li = (LayoutInflater) getApplicationContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View wordBar = li.inflate(R.layout.wordbar, null);
    LinearLayout ll = (LinearLayout) wordBar.findViewById(R.id.words);
    Button voiceCmd = (Button) wordBar.findViewById(R.id.voiceword);
    LinearLayout ll1 = null;
    Button voiceCmd1 = null;
    //comment this block in the event of showing only one keyboard so that we can only
    //one autocorrect bar
    if (isLargeScreen) {
        ll1 = (LinearLayout) wordBar.findViewById(R.id.words1);
        voiceCmd1 = (Button) wordBar.findViewById(R.id.voiceword1);
    }

    voiceCmd.setOnClickListener(voiceClickListener);

    mCandidateView = new CandidateView(this);
    mCandidateView.setService(this);
    setCandidatesViewShown(true);
    mCandidateView.setLayoutParams(new LayoutParams(
            LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

    ll.addView(mCandidateView);             

    return wordBar;

}

1 个答案:

答案 0 :(得分:9)

我遇到了同样的问题。我在Ced here的帖子上找到了答案。

解决方案是将此添加到输入法服务

@Override public void onComputeInsets(InputMethodService.Insets outInsets) {
    super.onComputeInsets(outInsets);
    if (!isFullscreenMode()) {
        outInsets.contentTopInsets = outInsets.visibleTopInsets;
    }
}

候选视图无意向上推送应用程序是故意的。来自doc

  

请注意,因为候选视图往往会显示和隐藏很多,所以它不会像软输入视图那样影响应用程序UI:它永远不会导致应用程序窗口调整大小,只会导致它们被淘汰如果用户需要查看当前焦点。

上面的hack增加了内容"区域包括候选视图区域。 onComputeInsets的文档将帮助您理解这一概念。

  

在UI中计算有趣的插图。默认实现使用候选框架的顶部用于可见插入,以及内容插入的输入框架的顶部。