You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Xamarin Forms自定义键盘上方添加可绑定自定义文本?

实现Xamarin Forms自定义键盘上方添加绑定文本的方案

1. 在自定义Entry控件中添加绑定属性

首先在EntryWithCustomKeyboard类中新增LabelText绑定属性,让XAML可以直接赋值或绑定:

public class EntryWithCustomKeyboard : Entry
{
    public static readonly BindableProperty LabelTextProperty =
        BindableProperty.Create(nameof(LabelText), typeof(string), typeof(EntryWithCustomKeyboard), string.Empty);

    public string LabelText
    {
        get => (string)GetValue(LabelTextProperty);
        set => SetValue(LabelTextProperty, value);
    }
}

2. 修改Android自定义渲染器的键盘布局

在Android端的自定义键盘渲染器中,调整键盘根布局,在原有按键区域上方添加文本控件:

[assembly: ExportRenderer(typeof(EntryWithCustomKeyboard), typeof(CustomKeyboardRenderer))]
namespace YourApp.Droid.Renderers
{
    public class CustomKeyboardRenderer : EntryRenderer
    {
        private TextView _headerLabel;

        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (Control != null && e.NewElement != null)
            {
                var customEntry = (EntryWithCustomKeyboard)e.NewElement;
                // 创建包含文本和键盘的复合垂直布局
                var compositeLayout = new LinearLayout(Context)
                {
                    Orientation = Orientation.Vertical
                };

                // 初始化顶部文本控件
                _headerLabel = new TextView(Context)
                {
                    Text = customEntry.LabelText,
                    TextSize = 16,
                    Gravity = GravityFlags.CenterHorizontal,
                    Padding = new Android.Views.Padding(0, 10, 0, 10)
                };
                compositeLayout.AddView(_headerLabel);

                // 初始化原有自定义键盘视图(替换为你原指南中的键盘创建逻辑)
                var customKeyboard = new Android.InputMethodServices.Keyboard(Context, Resource.Xml.custom_keyboard);
                var keyboardView = new KeyboardView(Context, null)
                {
                    Keyboard = customKeyboard,
                    LayoutParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent)
                };
                compositeLayout.AddView(keyboardView);

                // 将复合布局作为自定义键盘绑定到输入框
                // 此处替换原指南中设置KeyboardView的逻辑,将compositeLayout作为键盘视图使用
            }
        }

        // 同步绑定属性变化
        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);
            if (e.PropertyName == EntryWithCustomKeyboard.LabelTextProperty.PropertyName)
            {
                var customEntry = (EntryWithCustomKeyboard)Element;
                _headerLabel?.SetText(customEntry.LabelText, TextView.BufferType.Normal);
            }
        }
    }
}

3. 验证XAML使用

你的原有XAML代码可直接沿用,LabelText属性会同步到键盘上方的文本:

<local:EntryWithCustomKeyboard
    x:Name="entry1"
    HorizontalOptions="FillAndExpand"
    LabelText="My text up here"
    Margin="0, 0, 0, 20"
    Keyboard="Text"
    TextColor="Black"
    Placeholder="Custom Keyboard entry..." />

额外扩展说明

  • 若需要自定义文本样式(颜色、字体、间距等),可在EntryWithCustomKeyboard类中新增LabelTextColor、LabelTextSize等绑定属性,并在渲染器中同步设置到TextView。
  • 如需支持iOS端,需在iOS自定义渲染器中创建包含文本和自定义键盘视图的复合控件,逻辑与Android端一致。

内容的提问来源于stack exchange,提问作者Renma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 10:46:19