如果我翻译其父级,为什么我的部分观点会变得无法点击?

时间:2016-02-07 08:00:41

标签: c# android xamarin xamarin.android xamarin.forms

使用Xamarin.Forms,我有一个Grid视图来布局一些您在手机上看到的数字。

layout

以下是我用来创建Grid视图的代码以及我插入的Label

pinNumberGrid = new Grid {
    ColumnSpacing = 10,
    RowSpacing = 10,
    TranslationY = 30,
    HorizontalOptions = LayoutOptions.CenterAndExpand,
    VerticalOptions = LayoutOptions.CenterAndExpand,
    RowDefinitions = {
        new RowDefinition { Height = GridLength.Auto },
        new RowDefinition { Height = GridLength.Auto },
        new RowDefinition { Height = GridLength.Auto },
        new RowDefinition { Height = GridLength.Auto }
    },
    ColumnDefinitions = {
        new ColumnDefinition { Width = GridLength.Auto },
        new ColumnDefinition { Width = GridLength.Auto },
        new ColumnDefinition { Width = GridLength.Auto }
    }
};


readonly Dictionary<string, string> pinNumbers = new Dictionary<string, string> {
        { "1", "1" }, { "2", "2" }, { "3", "3" },
        { "4", "4" }, { "5", "5" }, { "6", "6" },
        { "7", "7" }, { "8", "8" }, { "9", "9" },
        { "a", "a" }, { "0", "0" }, { "b", "b" }
};

int x = 0;
int y = 0;

var tapListener = new TapGestureRecognizer();
tapListener.Tapped += (sender, e) =>
{
    var numberHit = (sender as Label).Text;
    textEntry.Text += numberHit;
};

foreach (KeyValuePair<string, string> pinKey in pinNumbers)
{
    var number = new Label {
        Text = pinKey.Value,
        TextColor = Color.White,
        FontSize = 35,
        WidthRequest = 70,
        HeightRequest = 70,
        XAlign = TextAlignment.Center,
        YAlign = TextAlignment.Center,
        InputTransparent = false,
        BackgroundColor = Color.Gray
    };

    number.GestureRecognizers.Add(tapListener);

    pinNumberGrid.Children.Add(number, x, y);

    x++;
    if (x >= 3)
    {
        x = 0;
        y++;
    }
}

一切都在正确布局。如您所见,我正在为每个标签添加TapGestureRecognizer。这段代码肯定有效,因为我在那里放了一个 Debug.Log ,我得到了我期望的 Application Output

问题在于,由于我在TranslateY = 30视图上执行了Grid,因此标签的可能点击区域似乎很糟糕。在我的设备上进行了大量的短信发送之后,可能的点击范围就是这样(绿色区域中没有的底部标签不会触摸):

enter image description here

如果我根本不翻译Grid视图,按钮就能完美运行。

有谁知道为什么会这样,我能做些什么来阻止它?

1 个答案:

答案 0 :(得分:1)

我使用Xamarin.Forms 2.0.1.6505尝试了上面的代码,即使在Translation=30对象上应用Grid并单击按钮的下半部分也没有问题(标签)。

尝试将Xamarin.Forms项目更新为至少2.0.1.6505并重试,希望您不会遇到此问题。

如果您仍然遇到问题,您要将Grid添加到哪个外部容器?我将其添加到一个简单的StackLayout中,并且没有遇到任何问题。

当您将项目更新为更高版本的Xamarin.Forms时,您还必须更改以下两行: -

XAlign = TextAlignment.Center,
YAlign = TextAlignment.Center,

以下内容,因为在Xamarin.Forms中进行了一些调整: -

HorizontalTextAlignment = TextAlignment.Center,
VerticalTextAlignment = TextAlignment.Center,