滚动视图 fullScrolling 时 EditText 失去焦点

6

我有一个聊天视图,其中包含一个滚动视图和一些文本视图,在滚动视图之上还有一个编辑框。当新消息打印到文本视图中时,滚动视图会自动滚动到底部。

activity.scrollView.post(new Runnable() {
            @Override
            public void run() {
                activity.scrollView.fullScroll(ScrollView.FOCUS_DOWN);
            }
        });

但是当我在EditText中输入文本时,它总是向下滚动并失去焦点(如果消息经常打印,那么输入消息就不真实)。 我该如何解决这个问题?我在Stack中找到了一些答案,但它并没有帮助我。以下是答案。

    editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean hasFocus) {
            if (hasFocus) {
                scrollView.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        scrollView.fullScroll(ScrollView.FOCUS_DOWN);
                    }
                }, 200);
            } else {
            }
        }
    });

更新:我的文本视图(TextView)是滚动视图(ScrollView)的子元素,具有以下属性:

textView.setTextIsSelectable(true);

我移除了那个属性,现在一切正常,我可以输入消息而且自动滚动不会阻止我。但是我仍然想知道为什么会发生这种情况。另外,我仍然希望能够选择(复制)文本的功能。

1个回答

1
你可以在滚动事件后添加一个请求焦点。你可能需要将其包装在可运行的代码块中等待滚动完成,类似于以下内容:
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
scrollView.post(new Runnable() {
    @Override
    public void run() {
        editText.requestFocus();
    }
});

请查看this post以获取更多信息。


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