Перемещение редактируемого текста

1

У меня есть EditText который выложен в Framelayout. Я пытаюсь разрешить EditText перемещаться по экрану при выборе.

Следовательно, всякий раз, когда пользователь выбирает режим, который позволяет перемещать элементы, я устанавливаю текст редактирования включенным (false), это работает, удаляя возможность редактирования текста для получения фокуса и отображения мигающего курсора или экранной клавиатуры. Но в то же время я не могу получить сенсорный ввод, когда я пытаюсь его переместить.

Есть ли какие-либо решения, из которых я смогу переместить текст редактирования и не иметь текст редактирования для получения фокуса?

Я попробовал настроить focusable или focusableInTouchMode на false, но он тоже не работает.

Теги:
android-edittext
layout
android-layout

3 ответа

1

Я сделал это двумя настройками. Сначала вам нужно, чтобы ваша структура обертки (LinearLayout) обрабатывала события перемещения. Прикрепите это к вашей обертке. Событие Touch:

void FrameTouch (object sender, View.TouchEventArgs e)
{

    if (e.Event.Action == MotionEventActions.Move) {
        int placeX = (int)e.Event.GetX () - v.Width / 2;
        int placeY = (int)e.Event.GetY () - v.Height / 2;
        v.Layout (placeX, placeY, placeX+v.Width, placeY+v.Height);
    }

}

Затем вам необходимо переопределить событие EditText onTouch, чтобы убедиться, что он не проглатывает события касания, когда он отключен:

public override bool OnTouchEvent (MotionEvent e)
{
    if (!Enabled) 
        return false;

    base.OnTouchEvent (e);
    return true;
}
0

Я думаю, что использование FrameLayout может быть неправильным выбором:

Все дочерние элементы FrameLayout закреплены в верхнем левом углу экрана; вы не можете указать другое местоположение для дочернего представления. (из документов)

0

Попробуйте обернуть EditText в его собственный макет (например, LinearLayout), чтобы вы могли реагировать на события касания от макета вместо EditText.

  • 0
    да, пока, это завернуто в макет. но когда я нажимаю в параметрах редактируемого текста, он получает фокус, появляется мигающий курсор и появляется программная клавиатура.
  • 0
    посмотрите на setFocusableInTouchMode() чтобы отключить фокус для вашего EditText, таким образом LinearLayout должен вместо этого взять фокус.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню