【问题标题】:Why does tapping on a Button in a Grid move it in front of other UI in Xamarin Forms?为什么点击 Grid 中的 Button 会将其移动到 Xamarin Forms 中的其他 UI 前面?
【发布时间】:2022-01-21 01:48:14
【问题描述】:

总结

我想更好地控制 Xamarin.Forms 中按钮上的文本呈现,因此我使用了一个包含标签和按钮对象的 Grid。这让我可以更好地控制文本,但它的副作用是在单击 Button 时将 Label 移动到 Button 后面。

为什么会这样? UI的顺序不应该由子级添加到Grid的Children中的顺序来决定吗?

详情

我创建了以下代码来单独测试问题:

// The grid can be added directly to a page
var grid = new Grid();
grid.Margin = new Thickness(100, 100);
grid.WidthRequest = 200;
grid.HeightRequest = 200;

var button = new Button();
button.WidthRequest = 80;
button.HorizontalOptions = LayoutOptions.Start;
button.VerticalOptions = LayoutOptions.Fill;
grid.Children.Add(button);

var label = new Label();
label.Text = "This is some text";
label.VerticalOptions = LayoutOptions.Fill;
label.InputTransparent = true;
grid.Children.Add(label);

按钮的大小使其仅与部分文本重叠,以便清楚地看到按钮移动到标签前面。

在点击按钮之前,布局显示如下:

点击后,按钮移动到标签前,如下图所示:

我可以让文本有一个点击手势,但是按钮在被触摸时不会播放它的原生效果,所以我想通过点击按钮来保留这个功能。

有没有办法让标签在点击后保持在按钮前面?

编辑

已在运行 Android 10 的摩托罗拉 Moto G7 和运行 Android 9 的模拟器上进行了测试。

请注意,在 Android 硬件上,标签永久保留在按钮后面。在模拟器上,当按下按钮时标签会移动到按钮后面,但在释放按钮后会重新出现在顶部。

【问题讨论】:

  • 我在 Android 11.0 上运行了您的代码,但无法重现该问题
  • 你在模拟器上测试吗?电脑还是mac?或者如果在物理设备上,是哪个型号?

标签: button xamarin.forms xamarin.android


【解决方案1】:

我做了一个演示并再次出现了问题。该问题将因fast renderers 而发生。添加代码'Forms.SetFlags("UseLegacyRenderers");'在调用 Forms.Init 之前添加到 MainActivity 类。比如

 protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Forms.SetFlags("UseLegacyRenderers");
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
        LoadApplication(new App());
    }

【讨论】:

    猜你喜欢
    • 2015-02-23
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多