在我的应用程序中,当用户单击或触摸“编辑文本”视图时,焦点有时会设置为开头。例如,如果现有文本为“Hi”。用户想要点击它并将其更改为“H1你好吗?”添加文字“你好吗?”。但由于焦点在一开始,它就变成了“你好吗?嗨”。因此,我总是希望在选中时将焦点设置为最正确的文本。我该怎么做呢。如果可能的话,请告诉我一些样品。感谢您的时间和帮助。
答案 0 :(得分:41)
您可以在文本中明确地将插入符号放在最后位置:
EditText editText = (EditText) findViewById(R.id.textId);
int pos = editText.getText().length();
editText.setSelection(pos);
答案 1 :(得分:6)
您提出的更具体的问题,您可以使用下一个代码:
EditText editText = (EditText) findViewById(R.id.textId);
editText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
editText.setSelection(editText.getText().length());
}
}
});
方法setOnFocusChangeListener()用于检测editText何时收到焦点。
答案 2 :(得分:0)
以上解决方案无效。
在这里,我为您提供了针对android的edittext中文本右侧的设置焦点的新解决方案。它的工作正常。
我的代码是:
EditText edt_ans = (EditText)findViewById(R.id.edt_answer);
edt_ans.addTextChangedListener(new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
// TODO Auto-generated method stub
edt_ans.setSelection(edt_ans.getText().length());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after)
{
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s)
{
// TODO Auto-generated method stub
}
});
快乐编码.... :)
答案 3 :(得分:0)
更突出的方法是您不需要一直手动设置选择。因此,在布局中使用CustomEditText而不是EditText。
public class CustomEditText extends EditText {
public CustomEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* This is a Fix of buggy behavior of android, where after setting text using setText(...), selection remain on
* first character and not at last character.
*/
@Override
public void setText(CharSequence text, BufferType type) {
super.setText(text, type);
if (text != null && ! (text.toString().trim().length() == 0 )) {
final int textLength = text.length();
if (getSelectionEnd() != textLength) {
setSelection(textLength);
}
}
}
}
答案 4 :(得分:0)
setSelection并不适合我,但这就像一个魅力。适用于afterTextChanged。
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
edittext.requestFocus(edittext.getText().length());
}
答案 5 :(得分:0)
在新的api你可以使用这样的东西:
//buttons setups
private void buttonsSetupForRecommendations() {
button2.setNextFocusRightId(R.id.ok_button);
button2.setNextFocusLeftId(R.id.ok_button);
button2.setNextFocusDownId(R.id.cancel_button);
button2.setNextFocusUpId(R.id.cancel_button);
button.setVisibility(View.GONE);
button2.setText(R.string.cancel_text);
button1.setText(R.string.clear_text);
button1.setNextFocusRightId(R.id.cancel_button);
button1.setNextFocusLeftId(R.id.cancel_button);
button1.setNextFocusUpId(R.id.ok_button);
button1.setNextFocusDownId(R.id.ok_button);
button1.requestFocus();
}
这项工作与按钮和其他项目。你可以在java代码^^或xml
上添加它答案 6 :(得分:0)
public void ontextchangelistner(){
if(s.toString().startsWith("0")) {
if (s.length() == 2) {
if (s.toString().contains("00")) {
editText.setText(s.toString().substring(1));
int pos = editText.getText().length();
editText.setSelection(pos);
}
}
}
如果您在编辑文本中输入第一个零,则显示;但是在第二次按0时,不显示该零。 我希望它会对你有所帮助。
答案 7 :(得分:0)
在addTextChangedListener()
内:
@Override
public void afterTextChanged(Editable editable) {
viewHolder.editText.setSelection(viewHolder.editText.getText().length()); //set cursor to the end
}