Android, как мне остановить указатель, появляющийся под EditText

У меня есть активность с некоторыми EditTexts в нем. Когда я нажимаю на EditText, чтобы изменить текст в нем, ниже появляется синяя стрелка, где появляется курсор. Как я могу остановить это появление?

Пример надоедливой синей стрелки

4 ответа

Как отметил MarvinLabs, это набор элементов для рисования в Android SDK. Они могут быть отменены, хотя.

  1. Найдите эти изображения на вашей платформе SDK:

    • text_select_handle_left.png
    • text_select_handle_middle.png
    • text_select_handle_right.png
  2. Скопируйте их в папку Drawables, чтобы иметь локальную копию для ссылки. Вы можете изменить их цвет, сделать их пустыми или что угодно. Обратите внимание, что, как сказал MarvinLabs, нецелесообразно полностью удалять их, поскольку они помогают пользователю выбирать текст для вырезания и копирования.

  3. Если у вас еще нет определенной темы в вашем файле styles.xml, определите ее. Затем добавьте эти элементы к нему:

_

<style name="CustomTheme" parent="@android:style/Theme.Holo.Light">
  <item name="android:textSelectHandleLeft">@drawable/text_select_handle_left</item>
  <item name="android:textSelectHandleRight">@drawable/text_select_handle_right</item>
  <item name="android:textSelectHandle">@drawable/text_select_handle_middle</item>
</style>

ДО:

до

ПОСЛЕ:

после

(разные EditTexts, но вы поняли идею)

Этот указатель является системным помощником, позволяющим пользователю легко перемещать курсор (точнее, просто касаясь EditText). Так что я не знаю, можете ли вы удалить его, но я уверен, что это не очень хорошая идея.

Кроме того, это тип указателя, который будет по-разному стилизован в зависимости от устройства. Если вы посмотрите на Android-источник SDK, вы найдете несколько доступных для рисования текстовых файлов с именем text_select_handle_XXX.png. Думаю, из этого вы узнаете, как изменить стиль системы в вашей собственной теме.

Я уверен, что это происходит только на этом конкретном API или устройстве. Это может работать по-другому на других приложениях. В конечном итоге я не вижу реального способа отключить что-то, что является родным для устройства. Кроме того, устройства там очень обширны, поэтому вам будет очень трудно отключить это, даже если вы найдете способ.

Вы можете сделать это программно с помощью EditText, Вам нужно создать кастом MovementMethod реализация, одна такая, что canSelectArbitrarily() возвращает ложь Тогда вы просто переопределите EditText.getDefaultMovementMethod() вернуть ваш CustomMovementMethod:

public class MyEditText extends EditText {
    private CustomMovementMethod customMovementMethod = new CustomMovementMethod();
    @Override 
    public MovementMethod getDefaultMovementMethod() {
        return customMovementMethod;
    }
}

private class CustomMovementMethod implements MovementMethod {

    @Override
    public boolean canSelectArbitrarily() {
        return false;
    }

    @Override
    public void initialize(TextView widget, Spannable text) {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean onGenericMotionEvent(TextView widget, Spannable text, MotionEvent event) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean onKeyDown(TextView widget, Spannable text, int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean onKeyOther(TextView view, Spannable text, KeyEvent event) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean onKeyUp(TextView widget, Spannable text, int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void onTakeFocus(TextView widget, Spannable text, int direction) {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean onTouchEvent(TextView widget, Spannable text, MotionEvent event) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean onTrackballEvent(TextView widget, Spannable text, MotionEvent event) {
        // TODO Auto-generated method stub
        return false;
    }

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