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