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