我正在尝试实现一个注册屏幕,其中我在两个ediTexts
内有两个TextInputLayouts
(一个用于电子邮件,另一个用于密码)。但是,对于电子邮件,我希望为域提供一个常量文本。有什么办法可以将文本设置为保留在editText的末尾或更好的建议吗?这里的电子邮件是提示,我希望用户只能在开头输入, @ example.com 保持不变。
答案 0 :(得分:1)
您可以尝试以下方法之一:
1)在水平LinearLayout中,将textInputLayout(width = wrap_content)和包含域名的textView(width = 0dp& weight = 1)放在一起。每当电子邮件edittext获得焦点时,显示textview,否则将其隐藏。
2)在edittext和onAfterTextChanged方法中添加文本观察器,将域名添加到字符串中。在这里你必须检查edittext的字符串是否以域名结尾...如果没有,那么只添加域名,否则不添加它。就个人而言,这不是一个优雅的解决方案,因为光标在文本更改后不会处于预期的位置。
由于
答案 1 :(得分:0)
所以这是更新的解决方案。
emailEditText.setText("@gmail.com");
emailEditText.setSelection(0);
emailEditText.requestFocus();
emailEditText.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event)
{
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
Layout layout = ((EditText) v).getLayout();
float x = event.getX() + emailEditText.getScrollX();
offset = layout.getOffsetForHorizontal(0, x);
maxOffset = emailEditText.getText().toString().indexOf("@");
break;
case MotionEvent.ACTION_UP:
if(offset > maxOffset && maxOffset >= 0) {
emailEditText.setSelection(maxOffset);
}
else if (offset >= 0) {
emailEditText.setSelection(offset);
}
event.setAction(MotionEvent.ACTION_CANCEL);
showSoftKeyBoard(emailEditText);
}
return false;
}
});
public void showSoftKeyBoard(View focusedView) {
if(getCurrentFocus() != null) {
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE))
.showSoftInput(focusedView, InputMethodManager.SHOW_IMPLICIT);
}
}
最后是免责声明......你可以在光标周围移动,但光标底部通常没有看到任何支架。
答案 2 :(得分:0)
你可以使用这个库,我已经工作了