8

我正在使用自定义键盘。我在 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;

}
4

2 回答 2

14

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

解决方案是将其添加到您的输入法服务中,

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

候选视图不会向上推动应用程序是有意的。从文档中,

请注意,由于候选视图倾向于显示和隐藏很多,它不会像软输入视图那样影响应用程序 UI:它永远不会导致应用程序窗口调整大小,只会在需要时使它们平移用户查看当前焦点。

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

在你的 UI 中计算有趣的插图。默认实现使用候选帧的顶部作为可见插图,并将输入帧的顶部作为内容插图。

于 2014-03-18T20:13:48.387 回答
0

我面临着同样的问题。问题是当我们添加CandidateView它时不会调整 ui。而不是调整它重叠在编辑文本上。

像这样: 在此处输入图像描述

简单的解决方案

继承的类InputMethodService有一个方法onComputeInsets。只需覆盖该功能并检查屏幕是否完全覆盖。如果屏幕不在,fullScreenMode();则将此行添加到其中。它将从 向上调整屏幕candidateView

outInsets.contentTopInsets = outInsets.visibleTopInsets;

像这样

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

结果将是

在此处输入图像描述

于 2022-03-01T09:53:21.297 回答