如何在Xamarin Android中将Zebra Xing(Zxing)制作为子视图 [英] How to make Zebra Xing (Zxing) as subview in Xamarin Android
问题描述
在我的Xamarin.Android应用中,我想使用ZXing扫描条形码.我想在活动视图中显示扫描仪.
In my Xamarin.Android app, I want to use ZXing to scan barcode. I want to display the scanner in the view of an 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.
I'm getting an error stating that I cannot convert support.v4.fragment into android.app.Fragment.
任何人都可以告诉我我在做错什么,以及我应该如何处理这种情况以在当前活动的布局中获取(ZXing的)扫描仪视图.
Can anyone advise what I'm doing wrong and how should I approach this to get the scanner view (of ZXing) in a layout of my current activity.
推荐答案
ZXingScannerFragment
从Android.Support.V4.App.Fragment
派生,而Activity.FragmentManager
期望从Android.App.Fragment
派生的片段.
ZXingScannerFragment
derives from Android.Support.V4.App.Fragment
while the Activity.FragmentManager
expects fragments derived from Android.App.Fragment
.
现在,如何解决该问题:
Now, how to fix that:
-
从与Android.Support.V4兼容的任何活动中继承您的活动.最简单的方法是使用
ZXing.Net.Mobile
软件包已经安装的软件包Xamarin.Android.Support.v4
中的Android.Support.V4.App.FragmentActivity
作为依赖项.
Inherit your activity from any activity that works with Android.Support.V4. Easiest would to use
Android.Support.V4.App.FragmentActivity
from packageXamarin.Android.Support.v4
that is already installed byZXing.Net.Mobile
package as a dependency.
活动正确时,可以使用this.SupportFragmentManager
而不是this.FragmentManager
来处理基于Support.V4的片段.
When you have correct activity, you can use this.SupportFragmentManager
instead of this.FragmentManager
to work with Support.V4-based fragments.
因此,您拥有的布局是不错的.代码应更新为以下内容:
So, layout you have is good. Code should be updated to something like:
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();
}
}
}
启动应用程序,您将看到扫描仪:
Launching the app, you will see your scanner:
这篇关于如何在Xamarin Android中将Zebra Xing(Zxing)制作为子视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!