我有一个编辑文本,我想知道光标是否已移动到下一行,如果它已移动到下一行我想调用一个新函数。我怎样才能做到这一点? 有没有一种方法或函数可以让我知道光标已移动到下一行?
PS:我正在使用文本观察器来实现大写和小写功能
scene.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int i, int j, int k) {
if(flag!=0)
{
flag=1;
strcheck = s.toString().charAt(s.length()-1);
int line = getCurrentCursorLine(scene);
lineno = line;
if(strcheck=='\n' && ib1==true){
ib22(scene, lineno);
} else if(strcheck=='\n' && ib2==true){
ib22(scene, lineno);
} else if(strcheck=='\n' && ib3==true){
ib55(scene, lineno);
} else if(strcheck=='\n' && ib4==true){
ib55(scene, lineno);
} else if(strcheck=='\n' && ib5==true){
ib33(scene, lineno);
} else if(strcheck=='\n' && ib6==true){
ib11(scene, lineno);
} else if(strcheck=='\n' && ib7==true){
ib22(scene, lineno);
} else if(strcheck=='\n' && ib1==false && ib2==false && ib3==false && ib4==false && ib5==false && ib6==false && ib7==false){
ib22(scene, lineno);
}
//int start = scene.getLayout().getLineStart(lineno);
//int end = scene.getLayout().getLineEnd(lineno);
//String previous = (start<1 && lineno==0)?"":scene.getText().toString().substring(0, start);
if (nowUpper){
flag = 0;
strcheck = Character.toUpperCase(strcheck);
scene.setText(scene.getText().toString().substring(0,scene.length()-1) + strcheck);
//scene.setText(previous + scene.getText().toString().substring(start, end).toUpperCase());
scene.setSelection(scene.getText().length());
}
else if (nowLower){
strcheck = Character.toLowerCase(strcheck);
}
}
else{
flag=1;
}
}
public void afterTextChanged(Editable editable) {
}
public void beforeTextChanged(CharSequence cs, int i, int j, int k) {
}
});
答案 0 :(得分:0)
使用TextWatcher检测用户是否已向EditText添加换行符
查看this answer了解详情。
答案 1 :(得分:0)
TextWatcher
可能正是您要找的。
根据您的使用情况,它会在用户移动光标时通知您。
尝试检查beforeTextChanged()
回调中的给定位置,以便在文本更改其值之前对其作出反应。
http://developer.android.com/reference/android/text/TextWatcher.html
示例:
txtEdit.addTextChangedListener (new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
public void afterTextChanged(Editable s) {
}
});
您将在这些回调中获得光标的新位置,这可能是您想要的。
祝你好运。
答案 2 :(得分:0)
TextWatchers没有告诉您有关选择的更改,请使用SpanWatcher,将其设置为您的可编辑文本的范围,其中start == 0,end == Editable.length()和flags == Spannable.SPAN_INCLUSIVE_INCLUSIVE