Android Edittext将光标放在提示的末尾

Android Edittext将光标放在提示的末尾,android,android-edittext,Android,Android Edittext,是否可以将光标放在提示的末尾(而不是文本的末尾) 方法setSelection()不起作用(由于文本长度为0,引发IndexOutOfBounds异常)。否,除非您将提示作为常规编辑文本内容,因为提示不是一个。但这违背了提示功能的目的 否,除非您将提示作为常规EditText内容,因为提示不是一个。但这违背了提示功能的目的 无法根据提示放置光标。但是,您可以做的是将您想要的文本附加到EditText,然后光标将位于该文本之后。然后可以添加TextWatcher,以防止用户删除附加的(提示)文本。

是否可以将光标放在提示的末尾(而不是文本的末尾)
方法
setSelection()
不起作用(由于文本长度为0,引发
IndexOutOfBounds
异常)。

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

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

无法根据提示放置光标。但是,您可以做的是将您想要的文本附加到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);
}

}

您不能根据提示放置光标。但是,您可以做的是将您想要的文本附加到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);
}

}

有一个技巧。首先,您获得提示字符串和提示颜色,然后设置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("");
        }
    });

这里有一个技巧。首先,您获得提示字符串和提示颜色,然后设置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("");
        }
    });

否。提示不可编辑。不能在那里设置光标。这毫无意义,你为什么要这样?你想继续根据提示编辑吗?不,我想让它看起来更高雅。现在光标放在提示的开头,我不喜欢它的外观。不。提示不可编辑。不能在那里设置光标。这毫无意义,你为什么要这样?你想继续根据提示编辑吗?不,我想让它看起来更高雅。现在光标放在提示的开头,我不喜欢它的外观。谢谢,我会试试看。这可能是最接近我需要的方法。谢谢,我会试试的。这可能是最接近我需要的方法。