Курсор за подсказкой
У меня проблема с EditText
где гравитация установлена в центр. Из-за этого мне пришлось поставить атрибут android:ellipsize="start"
чтобы подсказка появилась в центре.
Однако подсказка появляется перед курсором, что придает приложению довольно уродливый вид:
Что я хочу сделать, это отобразить курсор перед текстом. Есть предложения для этого?
3 ответа
У меня есть 3 решения , на самом деле, что 2 пути. С одной стороны, когда текст пуст, который должен отображать подсказку, мы скрываем подсказку либо показать, с другой стороны, это отрегулировать расположение курсора (widgit). Условием является EditText, помещенный в макет, отрегулируйте текст редактирования макет гравитации не сам гравитация. Но мое требование перед намеком, вы просто гравитация направо. как эта картинка: введите описание изображения здесь
@Override
public void onFocusChange(View v, boolean hasFocus) {
adjustCursorPosition(etInput.getText());
}
@Override
public void afterTextChanged(Editable s) {
adjustCursorPosition(etInput.getText());
}
private void adjustCursorPosition(CharSequence text){
if (!TextUtils.isEmpty(etInput.getHint())){
adjustGravityForCursor(text);
//adjustCursorVisible(text);
//adjustHintContent(hasFocus(),text);
}
}
private void adjustHintContent(boolean hasFocus, CharSequence text){
if (TextUtils.isEmpty(text)) {
etInput.setHint(hasFocus ? "" : mHint);
}
}
private void adjustCursorVisible(CharSequence text){
etInput.setCursorVisible(!TextUtils.isEmpty(text));
}
private void adjustGravityForCursor(CharSequence text) {
LayoutParams lp = (LayoutParams) etInput.getLayoutParams();
if (mSpaceWidth <= 0) mSpaceWidth = lp.width;
if (!TextUtils.isEmpty(text)) {
etInput.setGravity(Gravity.CENTER);
lp.leftMargin = 0;
} else {
etInput.setGravity(Gravity.LEFT);
lp.leftMargin = (mSpaceWidth - measureText(etInput,mHint)) / 2;
}
etInput.setLayoutParams(lp);
}
Я думаю, что вы можете использовать метод setSelection EditText, согласно этой теме.
Самым быстрым решением будет очистить подсказку для editText Touch: (я предположил, что этот текст редактирования будет MYET). Сначала установите слушатель onTouch для MYET.
Затем, на Touch, вернуть TRUE(instread of false).
После этого, на Touch, используйте MYET.setHint(""); Это очистит подсказку.
Вот код:
MYET.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
MYET.setHint("");
return true;
}
});
примечание: если setHint("")
не работает, вы можете использовать MYET.setText("");