2017-10-16 5 views
0

J'ai une question de savoir comment puis-je intégrer le scanner de codes à barres lamantin dans mon stackLayout avec mesure spécifique ... Voici une photo de mon code ...Comment puis-je intégrer le scanner de codes-barres de manatee works dans un empilement?

enter image description here

Et voici mon code réel ... S'il vous plaît aidez-moi ...

<ContentPage.Content> 
     <StackLayout x:Name="layoutWrapper" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"> 
      <ActivityIndicator Color="{StaticResource headerColor}" IsVisible="{Binding IsBusy}" IsRunning="{Binding IsBusy}" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand" /> 
      <Grid x:Name="scannerWrapper" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" IsVisible="{Binding IsBusy, Converter={StaticResource not}" > 
       <StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"> 
        <StackLayout HeightRequest="20"></StackLayout> 
        <StackLayout BackgroundColor="White" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"> 
         <Label TextColor="Black" HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand" HorizontalTextAlignment="Center" Text="{i18n:Translate ScanInventoryLbl}" /> 
        </StackLayout> 
        <StackLayout HeightRequest="40"></StackLayout> 
        <StackLayout BackgroundColor="Black" HorizontalOptions="FillAndExpand" HeightRequest="280" VerticalOptions="FillAndExpand" Spacing="5" Orientation="Horizontal"></StackLayout> 
        <Label VerticalOptions="FillAndExpand" /> 
        <Label VerticalOptions="FillAndExpand" /> 
        <StackLayout BackgroundColor="White" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"> 
         <StackLayout x:Name="ipInputLabel" BackgroundColor="White" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Spacing="5" Orientation="Horizontal"> 
          <Label TextColor="Black" HorizontalOptions="EndAndExpand" VerticalOptions="CenterAndExpand" HorizontalTextAlignment="Center" Text="{i18n:Translate NoQRLbl}" /> 
         </StackLayout> 
         <Label x:Name="versionAppLabel" FontSize="14" TextColor="#1976D2" VerticalOptions="End" HorizontalTextAlignment="Center" /> 
        </StackLayout> 
        <StackLayout HeightRequest="20"></StackLayout> 
       </StackLayout> 
      </Grid> 
     </StackLayout> 
    </ContentPage.Content> 

Répondre

0

Vous devez utiliser ViewRenderer et inclure cette vue dans votre page. https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/custom-renderer/view/

Ici dans cette application https://github.com/manateeworks/xamarin-shopping-cart-demo-app scanner est implémenté comme page. Apportez les modifications et convertissez PageRenderer à ViewRenderer.

Utilisez également scanner.ScanInView dans ViewRenderer natif au lieu de scanner.ScanWithCallback. Voici une partie du code de ViewRenderer natif Droid

[assembly: ExportRenderer(typeof(ManateeShoppingCart.CameraPreview), typeof(ManateeShoppingCart.Droid.ScanPageRenderer))] 
 
namespace ManateeShoppingCart.Droid 
 
{ 
 
    public class ScanPageRenderer : ViewRenderer, IScanSuccessCallback 
 
    { 
 
     Scanner scanner; 
 

 
     protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.View> e) 
 
     { 
 
      base.OnElementChanged(e); 
 

 
      if (e.OldElement != null || Element == null) 
 
      { 
 
       return; 
 
      } 
 

 
      scanner = new Scanner(Forms.Context); 
 
      scanner.setInterfaceOrientation("All"); 
 
      scanner.closeScannerOnDecode = false; 
 

 
      customDecoderInit(); 
 

 
      double screenHeight = App.Current.MainPage.Height > App.Current.MainPage.Width ? App.Current.MainPage.Height : App.Current.MainPage.Width; 
 
      double screenWidth = App.Current.MainPage.Height < App.Current.MainPage.Width ? App.Current.MainPage.Height : App.Current.MainPage.Width; ; 
 

 
      float preivewX = (float)((CameraPreview)Element).CameraPreviewX; 
 
      float preivewY = (float)((CameraPreview)Element).CameraPreviewY; 
 
      float previewWidth = (float)((CameraPreview)Element).CameraPreviewWidth; 
 
      float previewHeight = (float)((CameraPreview)Element).CameraPreviewHeight; 
 

 
      scanner.ScanInView(this, new RectangleF((float)(preivewX/screenWidth) * 100, (float)(preivewY/screenHeight) * 100, (float)(previewWidth/screenWidth) * 100, (float)(previewHeight/screenHeight) * 100)); 
 
     }

+0

Ouais, j'ai essayé d'utiliser cette façon, mais il ne fonctionne pas. J'ai essayé de modifier certaines options d'édition dans la page de rendu de l'application, mais il n'y a pas d'option pour modifier la taille de la fenêtre, sauf pour la zone d'analyse. D'autres suggestions? Merci pour la réponse ... –

+0

J'ai édité ma réponse, voir comment configurer votre taille – MarkoJk

+0

Et comment dois-je appeler le résultat directement sans créer void 'IScanSuccessCallback.barcodeDetected (résultat MWResult)'? –