我有一个在Framelayout
中布局的EditText
。我正试图允许EditText
在选择时在屏幕周围移动。
因此,每当用户选择允许移动项目的模式时,我都会将编辑文本设置为启用(false),这通过消除编辑文本获得焦点并显示闪烁光标或软键盘的可能性来工作。但与此同时,当我试图移动它时,我无法接收任何触摸输入。
是否有任何解决方案,我将能够移动编辑文本,而没有编辑文本接收焦点?
我尝试将focusable
或focusableInTouchMode
设置为false,但它也不起作用。
我通过两个设置完成了这个操作。首先,您需要使用包装器结构(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;
}
尝试将EditText包装在它自己的布局中(如LinearLayout),这样你就可以让触摸事件从布局而不是EditText中做出反应。
我认为使用framayout可能不是正确的选择:
FrameLayout的所有子元素都固定在屏幕的左上角;不能为子视图指定不同的位置。(文档)