Перемещение редактируемого текста - PullRequest
1 голос
/ 25 августа 2011

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

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

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

Я пытался установить для focusable или focusableInTouchMode значение false, но оно также не работает.

Ответы [ 3 ]

1 голос
/ 20 августа 2013

Я сделал это двумя настройками. Сначала вам нужно, чтобы ваша структура-оболочка (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);
    }

}

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

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

    base.OnTouchEvent (e);
    return true;
}
0 голосов
/ 26 августа 2011

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

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

0 голосов
/ 25 августа 2011

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

...