使用Xamarin ZXing.Net.Mobile - scanner stretched = ISSUE

时间:2018-01-22 18:20:45

标签: c# xamarin xamarin.forms zxing

我目前正在使用包ZXing.Net.Mobile用于Xamarin Forms。 我希望内容位于屏幕顶部和屏幕底部,我希望扫描仪位于中间的某个位置。

如果我指定了扫描仪的高度,它会拉伸它使它变得难看并且不太好(因为扫描仪是用于全屏?)。

我希望在屏幕顶部有一些动态高度的内容,然后我想要高度为150-200的扫描仪,然后我希望在屏幕的其余部分显示一些内容。

我正在调查ZXingDefaultOverlay,但我无法按照我的意愿去工作。

任何人都有想法,示例或答案可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

以下是我使用网格的示例代码 用于在屏幕的顶部和底部显示内容,中间屏幕包含扫描仪。

public ZXingDefaultOverlay()
{

BindingContext = this;

            RowSpacing = 0;

            VerticalOptions = LayoutOptions.FillAndExpand;
            HorizontalOptions = LayoutOptions.FillAndExpand;

            RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
            RowDefinitions.Add(new RowDefinition { Height = new GridLength(2, GridUnitType.Star) });
            RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });

ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });

Children.Add(new BoxView
            {
                VerticalOptions = LayoutOptions.Fill,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                BackgroundColor = Color.Transparent,
                Opacity = 0.7,
            }, 0, 0);

            Children.Add(new BoxView
            {
                VerticalOptions = LayoutOptions.Fill,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                BackgroundColor = Color.Transparent,
                Opacity = 0.7,
            }, 0, 2);

StackLayout ImageLabelContainer = new StackLayout();

            Image imgBox = new Image();
            imgBox.Source = "scan_qr.png";
            imgBox.VerticalOptions = LayoutOptions.Fill;
            imgBox.HorizontalOptions = LayoutOptions.FillAndExpand;
            ImageLabelContainer.Children.Add(imgBox);

            Label lblSuccess = new Label();
            lblSuccess.Margin = new Thickness(0, 7, 0, 0);
            lblSuccess.HorizontalTextAlignment = TextAlignment.Center;
            lblSuccess.TextColor = Color.Green;
            lblSuccess.AutomationId = "zxingDefaultOverlay_BottomTextLabel";
            lblSuccess.SetBinding(Label.TextProperty, new Binding(nameof(BottomText)));
            ImageLabelContainer.Children.Add(lblSuccess);

            Children.Add(ImageLabelContainer, 0, 1);
}

您可以根据需要设置行的高度。