如何在 Xamarin 中将 Zebra Xing (Zxing) 作为子视图 Android
How to make Zebra Xing (Zxing) as subview in Xamarin Android
在我的 Xamarin.Android 应用程序中,我想使用 ZXing 来扫描条码。我想在 activity.
的视图中显示扫描仪
代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="5">
<Button
android:text="Scan with Default Overlay"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/buttonScanDefaultView"
android:layout_weight="1" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/scanView"
android:layout_weight="2" />
</LinearLayout>
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
scannerFragment = new ZXingScannerFragment ();
scannerFragment.CustomOverlayView = CustomOverlayView;
scannerFragment.UseCustomOverlayView = UseCustomOverlayView;
scannerFragment.TopText = TopText;
scannerFragment.BottomText = BottomText;
this.FragmentManager.BeginTransaction ()
.Replace (Resource.Id.scanView, scannerFragment, "ZXINGFRAGMENT")
.Commit ();
}
我收到一条错误消息,指出我无法将 support.v4.fragment 转换为 android.app.Fragment。
任何人都可以告诉我我做错了什么以及我应该如何处理这个问题以在我当前的 activity.
布局中获取(ZXing 的)扫描仪视图
ZXingScannerFragment
派生自 Android.Support.V4.App.Fragment
而 Activity.FragmentManager
期望片段派生自 Android.App.Fragment
.
现在,如何解决这个问题:
从任何与 Android.Support.V4 一起工作的 activity 继承你的 activity。最简单的方法是使用包 Xamarin.Android.Support.v4
中的 Android.Support.V4.App.FragmentActivity
,该包已由 ZXing.Net.Mobile
包作为依赖项安装。
当您有正确的 activity 时,您可以使用 this.SupportFragmentManager
而不是 this.FragmentManager
来处理基于 Support.V4 的片段。
所以,你的布局很好。代码应更新为:
using Android.App;
using Android.Widget;
using Android.OS;
using ZXing.Mobile;
using Android.Support.V4.App;
namespace ZXingSample
{
[Activity(Label = "ZXing Sample", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : FragmentActivity
{
int count = 1;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Main);
var scannerFragment = new ZXingScannerFragment();
scannerFragment.UseCustomOverlayView = false;
scannerFragment.TopText = "Scan your code";
scannerFragment.BottomText = "Then proceed";
this.SupportFragmentManager.BeginTransaction()
.Replace(Resource.Id.scanView, scannerFragment, "ZXINGFRAGMENT")
.Commit();
}
}
}
启动应用程序,您将看到您的扫描仪:
在我的 Xamarin.Android 应用程序中,我想使用 ZXing 来扫描条码。我想在 activity.
的视图中显示扫描仪代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="5">
<Button
android:text="Scan with Default Overlay"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/buttonScanDefaultView"
android:layout_weight="1" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/scanView"
android:layout_weight="2" />
</LinearLayout>
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
scannerFragment = new ZXingScannerFragment ();
scannerFragment.CustomOverlayView = CustomOverlayView;
scannerFragment.UseCustomOverlayView = UseCustomOverlayView;
scannerFragment.TopText = TopText;
scannerFragment.BottomText = BottomText;
this.FragmentManager.BeginTransaction ()
.Replace (Resource.Id.scanView, scannerFragment, "ZXINGFRAGMENT")
.Commit ();
}
我收到一条错误消息,指出我无法将 support.v4.fragment 转换为 android.app.Fragment。
任何人都可以告诉我我做错了什么以及我应该如何处理这个问题以在我当前的 activity.
布局中获取(ZXing 的)扫描仪视图ZXingScannerFragment
派生自 Android.Support.V4.App.Fragment
而 Activity.FragmentManager
期望片段派生自 Android.App.Fragment
.
现在,如何解决这个问题:
从任何与 Android.Support.V4 一起工作的 activity 继承你的 activity。最简单的方法是使用包
Xamarin.Android.Support.v4
中的Android.Support.V4.App.FragmentActivity
,该包已由ZXing.Net.Mobile
包作为依赖项安装。当您有正确的 activity 时,您可以使用
this.SupportFragmentManager
而不是this.FragmentManager
来处理基于 Support.V4 的片段。
所以,你的布局很好。代码应更新为:
using Android.App;
using Android.Widget;
using Android.OS;
using ZXing.Mobile;
using Android.Support.V4.App;
namespace ZXingSample
{
[Activity(Label = "ZXing Sample", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : FragmentActivity
{
int count = 1;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Main);
var scannerFragment = new ZXingScannerFragment();
scannerFragment.UseCustomOverlayView = false;
scannerFragment.TopText = "Scan your code";
scannerFragment.BottomText = "Then proceed";
this.SupportFragmentManager.BeginTransaction()
.Replace(Resource.Id.scanView, scannerFragment, "ZXINGFRAGMENT")
.Commit();
}
}
}
启动应用程序,您将看到您的扫描仪: