【问题标题】:Keyboard shown only on double tapping entry仅在双击输入时显示的键盘
【发布时间】:2017-05-02 02:07:08
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 为什么要删除占位符文本?它会自行消失,并在字段为空时再次显示。
  • 占位符仅在我开始输入时被删除。我希望在条目获得焦点时删除占位符。

标签: c# android xamarin.forms


【解决方案1】:

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

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

在后面的代码中

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

尝试一下,如果它可以工作 :) 虽然我自己不会在用户开始输入之前删除占位符,因为这样它就可以正常工作。

【讨论】:

  • 感谢您的回复。但同样的事情正在发生,键盘只有在双击时才会弹出。
【解决方案2】:

我可以重现您找到的场景。通过查看xamarin表单源代码的EntryRenderer可以发现

_textView.Hint = Element.Placeholder;

Hint属性来自android native的EditText,渲染器目标对象是EntryEditText,继承自android native的EditText

所以我创建了一个 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 = "";
    }
}

当我单击 EditText 时,键盘显示,同时提示消失了。

我还创建了 Entry 的客户渲染器,代码如下:

可移植代码

public class MyEditText : View
{

}

android项目代码

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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    相关资源
    最近更新 更多