我有什么:
我有一个派生自 Xamarin.Forms.Entry
的自定义类 MyEntry
和适用于 Android 和 iOS 的自定义渲染器类 MyEntryRenderer
。
我想要的:
我想通过更改 Android
上的 ImeOptions
和 ReturnKeyType
将键盘的“输入”按钮更改为“搜索”按钮iOS
(参见示例代码)。当我按下更改后的“搜索”按钮时,应该调用 MyEntry.Completed
事件(就像之前按下未更改的“输入”按钮时一样。
真正发生的事情:
在 iOS
上,代码按预期工作。但是在 Android
上没有任何反应。该事件不会被调用。
我的问题:
如何在 Android
上实现上述内容?
示例代码:
应用程序:
namespace CustomEntry
{
public class App
{
public static Page GetMainPage()
{
MyEntry entry = new MyEntry {
VerticalOptions = LayoutOptions.CenterAndExpand,
HorizontalOptions = LayoutOptions.CenterAndExpand,
Placeholder = "Enter some text"
};
entry.Completed += delegate {
Console.WriteLine("Completed");
};
return new ContentPage {
Content = entry,
};
}
}
}
MyEntry.cs:
namespace CustomEntry
{
public class MyEntry:Entry
{
}
}
MyEntryRenderer.cs(安卓):
[assembly: ExportRenderer(typeof(MyEntry), typeof(MyEntryRenderer))]
namespace CustomEntry.Android
{
public class MyEntryRenderer:EntryRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (Control != null) {
Control.ImeOptions = global::Android.Views.InputMethods.ImeAction.Search;
}
}
}
}
MyEntryRenderer.cs(iOS):
[assembly: ExportRenderer(typeof(MyEntry), typeof(MyEntryRenderer))]
namespace CustomEntry.iOS
{
public class MyEntryRenderer:EntryRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (Control != null) {
Control.ReturnKeyType = UIReturnKeyType.Search;
}
}
}
}
最佳答案
我自己找到了解决问题的方法:
首先,我在自定义条目中添加了一个Action
,以便在我按下“搜索”按钮时调用。
MyEntry.cs
namespace CustomEntry
{
public class MyEntry:Entry
{
public Action SearchPressed = delegate {
};
}
}
然后我像这样“监听”ImeAction.Search
并调用我添加到我的自定义条目中的Action
。
MyEntryRenderer.cs(安卓):
[assembly: ExportRenderer(typeof(MyEntry), typeof(MyEntryRenderer))]
namespace CustomEntry.Android
{
public class MyEntryRenderer:EntryRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (Control != null) {
Control.ImeOptions = ImeAction.Search;
Control.EditorAction += (sender, args) => {
if (args.ActionId == ImeAction.Search) {
var entry = (AddressEntry)Element;
entry.SearchPressed();
}
};
}
}
}
}
在我使用 MyEntry
的第三个类中,我可以在按下“搜索”按钮时运行一些代码,如下所示:
var myEntry = new MyEntry();
myEntry.SearchPressed += SomeMethod;
关于android - 在自定义渲染器中更改键盘的 Xamarin.Forms.Entry 的 ImeOptions 在 Android 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27690724/