滚动视图全滚动时 EditText 失去焦点
EditText lost focus when scrollview fullscrolling
我有聊天视图,有滚动视图,包含文本视图,并在滚动视图上方编辑文本。当新消息打印到 textview 时,滚动视图 fullscrolling 到结束。
activity.scrollView.post(new Runnable() {
@Override
public void run() {
activity.scrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
});
但是,如果我在 EditText 中键入文本,它总是向下滚动并从编辑文本中失去焦点(因此,如果消息经常打印,则键入消息是不真实的)。我该如何解决?我在堆栈中找到了一些答案,但对我没有帮助。在这里。
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.setTextIsSelectable(true);
我删除了 属性,现在可以了,我可以输入消息,自动滚动不会阻止我。但它仍然质疑为什么会这样。此外,我仍然希望能够 select(复制)文本。
您可以在滚动事件后添加焦点请求。您可能需要将其包装在可运行的文件中以等待滚动完成,如下所示:
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
scrollView.post(new Runnable() {
@Override
public void run() {
editText.requestFocus();
}
});
有关详细信息,请参阅 this post。
我有聊天视图,有滚动视图,包含文本视图,并在滚动视图上方编辑文本。当新消息打印到 textview 时,滚动视图 fullscrolling 到结束。
activity.scrollView.post(new Runnable() {
@Override
public void run() {
activity.scrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
});
但是,如果我在 EditText 中键入文本,它总是向下滚动并从编辑文本中失去焦点(因此,如果消息经常打印,则键入消息是不真实的)。我该如何解决?我在堆栈中找到了一些答案,但对我没有帮助。在这里。
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.setTextIsSelectable(true);
我删除了 属性,现在可以了,我可以输入消息,自动滚动不会阻止我。但它仍然质疑为什么会这样。此外,我仍然希望能够 select(复制)文本。
您可以在滚动事件后添加焦点请求。您可能需要将其包装在可运行的文件中以等待滚动完成,如下所示:
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
scrollView.post(new Runnable() {
@Override
public void run() {
editText.requestFocus();
}
});
有关详细信息,请参阅 this post。