Edittext将光标放在提示的末尾

时间:2017-10-27 15:27:02

标签: android android-edittext

是否可以以某种方式将光标放在提示的末尾(不是文本的结尾)?

方法setSelection()无效(抛出IndexOutOfBounds异常,因为文本长度为0)。

3 个答案:

答案 0 :(得分:1)

您无法根据提示放置光标。但是,您可以执行的操作是将所需的文本附加到EditText,然后光标将在此之后。然后,您可以添加TextWatcher以防止用户删除附加(提示)文本。这是一些代码:

public class MainActivity extends AppCompatActivity {
private String HINT = "Name: ";
private EditText editText;

private TextWatcher textWatcher = new TextWatcher()
{
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after)
    {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count)
    {
        if (!s.toString().startsWith(HINT))
        {
            editText.removeTextChangedListener(this);
            editText.setText("");
            editText.append(HINT);
            editText.addTextChangedListener(this);
        }
    }

    @Override
    public void afterTextChanged(Editable s)
    {

    }
};

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    editText = findViewById(R.id.edit_text);
    editText.append(HINT);
    editText.addTextChangedListener(textWatcher);
}

}

答案 1 :(得分:1)

有一个技巧。首先你得到提示字符串和提示颜色然后你设置EditText的文本(值等于提示字符串)并且不要忘记设置textcolor(值提示颜色)。当用户点击EditText时,你可以在重置空文本时更改颜色。

    final EditText editText = (EditText) findViewById(R.id.your_id);
    String hint = editText.getHint().toString();
    ColorStateList hintTextColor = editText.getHintTextColors();
    final ColorStateList textColor = editText.getTextColors();
    editText.setTextColor(hintTextColor);
    editText.setText(hint);
    editText.setSelection(hint.length());

    editText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            editText.setTextColor(textColor);
            editText.setText("");
        }
    });

答案 2 :(得分:0)

不,除非您将提示作为常规EditText内容,因为提示不是一个。但这违背了提示功能的目的......