Android, как мне остановить указатель, появляющийся под EditText
У меня есть активность с некоторыми EditTexts в нем. Когда я нажимаю на EditText, чтобы изменить текст в нем, ниже появляется синяя стрелка, где появляется курсор. Как я могу остановить это появление?
4 ответа
Как отметил MarvinLabs, это набор элементов для рисования в Android SDK. Они могут быть отменены, хотя.
Найдите эти изображения на вашей платформе SDK:
- text_select_handle_left.png
- text_select_handle_middle.png
- text_select_handle_right.png
Скопируйте их в папку Drawables, чтобы иметь локальную копию для ссылки. Вы можете изменить их цвет, сделать их пустыми или что угодно. Обратите внимание, что, как сказал MarvinLabs, нецелесообразно полностью удалять их, поскольку они помогают пользователю выбирать текст для вырезания и копирования.
Если у вас еще нет определенной темы в вашем файле 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;
}
}