安卓 - 弹出键盘修复底部帧布局问题

3
我正在开发一个Android应用程序,我的主Activity具有底部用FrameLayout表示的5个选项卡。每个选项卡都指向特定的碎片,根据单击的选项卡加载相应的碎片。
在我的第一个选项卡中,我有一个EditText。当焦点在编辑文本上时,我需要仅通过将(“EditText和发送按钮”)的布局“向上”移动而不推动其他组件(包括底部标签框架布局)来显示键盘。同样,隐藏键盘时,“EditText和Send btn”布局应该位于选项卡框架布局的正上方。请问有人能为我提供解决方案吗?
(假设情况与Facebook评论相同。当我们进入帖子以发表评论时,布局(“撰写评论”ET和POST btn)将被向上推,而不会移动任何其他组件,包括底部标签(“新闻动态”,“请求”,“信使”,“通知”,“更多”))
我不想使框架布局的可见性变为Gone/Visible,因为当键盘上下滑动时,它会产生丑陋的动画效果。
2个回答

1
使用没有 weightSum 的 LinearLayout,将您布局中的主视图高度设置为 0dp,权重设置为 1。

我不太明白你想表达什么。能否请你详细说明一下你的回答? - maanick90

0

我有完全相同的问题。我能找到的最好的解决方法(正如原始问题中所暗示的)如下。但这只是一个边缘解决方案,不是一个很好的解决方案。

设置weightSum的问题在于,如果包含编辑框的滚动视图更长,按钮将消失。最好的解决方案应该允许按钮在正常视图下保持在页面底部,但在屏幕键盘上隐藏。

 public boolean dispatchTouchEvent(MotionEvent event) {

    View v = getCurrentFocus();
    boolean ret = super.dispatchTouchEvent(event);

    if (v instanceof EditText) {
        View w = getCurrentFocus();
        int scrcoords[] = new int[2];
        w.getLocationOnScreen(scrcoords);
        float x = event.getRawX() + w.getLeft() - scrcoords[0];
        float y = event.getRawY() + w.getTop() - scrcoords[1];
        if (event.getAction() == MotionEvent.ACTION_UP && (x < w.getLeft() || x >= w.getRight() || y < w.getTop() || y > w.getBottom()) ) {
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0);
            layButton.setVisibility(View.VISIBLE);
        }
        else
        {
            layButton.setVisibility(View.GONE);
        }
    }
    return ret;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接