Курсор за подсказкой

У меня проблема с 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("");

Другие вопросы по тегам