键盘仅在双击条目上显示

时间:2016-12-16 09:57:34

标签: c# android xamarin.forms

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

.myBlock{
  animation: fadeInOut 3s infinite;
}

@keyframes fadeInOut{
  0%{
    opacity: 0;
  }
  20%{
    opacity: 1;
  }
  80%{
    opacity: 1;
  }
  100%{
    opacity: 0;
  }
}

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

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

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

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

2 个答案:

答案 0 :(得分:0)

我认为发生的事情就是这里的种族状况。所以我认为你需要从Xaml实现onFocus事件并从后面的代码处理它。

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

并在

背后的代码中
 private void userNameEntry_OnFocused(object sender, FocusEventArgs e)
 {
    userNameEntry.Placeholder = "";
 }

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

答案 1 :(得分:0)

我可以重现你找到的场景。通过检查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时,它无法检测到点击事件。当我第二次点击Hint时,EditText消失了。

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