键盘仅在双击条目时显示



我在xaml中有一个条目,如下所示:

<Entry x:name="userNameEntry" Placeholder="Name"/>

在我的 xaml.cs 文件中,我在页面的构造函数中编写了以下代码:

userNameEntry.Focused += (sender, e) =>
{
userNameEntry.Placeholder = "";
}

每当我点击输入字段时,占位符文本都会被替换,但不显示键盘。我必须再次点击才能调出键盘。

如何更换占位符并显示键盘?

我认为这里发生的事情是一种竞争条件。所以我认为你需要从 Xaml 实现 onFocus 事件并从后面的代码中处理它。

<Entry x:name="userNameEntry" Placeholder="Name" Focused="userNameEntry_OnFocused"/>

并在代码隐藏中

private void userNameEntry_OnFocused(object sender, FocusEventArgs e)
{
userNameEntry.Placeholder = "";
}

如果它能:)工作,请尝试一下虽然我自己我不会在用户开始输入之前删除占位符,因为那样它只会起作用.

我可以重现你找到的场景。通过检查 xamarin 表单源代码的 EntryRenderer,我们可以发现

_textView.Hint = Element.Placeholder;

Hint属性来自安卓原生EditText,渲染器目标对象是继承自安卓原生EditText的EntryEditText。

所以我创建了一个 xamarin android 项目,并使用带有提示的 EditText 作为以下代码:

public class MainActivity : Activity
{
EditText et;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
et = (EditText)FindViewById(Resource.Id.edittext);
et.Click += Et_Click; 
}
private void Et_Click(object sender, System.EventArgs e)
{
et.Hint = "";
}
}

当我单击编辑文本时,键盘显示,同时提示消失了。

我还创建了条目的客户呈现器,如以下代码:

可移植代码

public class MyEditText : View
{
}

安卓项目代码

public class MyEditTestRenderer : ViewRenderer<MyEditText, EditText>,Android.Views.View.IOnClickListener
{
EditText et;
protected override void OnElementChanged(ElementChangedEventArgs<MyEditText> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{
// perform initial setup
et = new EditText(this.Context);
SetNativeControl(et);
}
et.Click += Et_Click; 
et.Hint = "name";
// et.SetOnClickListener(this);
}
private void Et_Click(object sender, EventArgs e)
{
et.Hint = "";
}
}  

但是当我第一次点击EditText时,它无法检测到点击事件。当我第二次单击EditText时,Hint消失了。

您可以将此问题报告给 https://bugzilla.xamarin.com/

最新更新