ZXing barcode scanner in custom layout in fragment
It's so easy, owner of ZXing said that only add following code into onResume
and onPause
overrided method:
@Overridepublic void onResume() { barcodeView.resume(); super.onResume();}@Overridepublic void onPause() { barcodeView.pause(); super.onPause();}
You must initialize the barcodeView.
Try this code:
IntentIntegrator integrator = IntentIntegrator.forSupportFragment(this);barcodeView.initializeFromIntent(integrator.createScanIntent());
Try to use the minimal library of zxing like following link: https://github.com/andreipro/zxing-android-minimal
It's easy. You just have to add these lines into your gradle
repositories { mavenCentral() maven { url "https://raw.github.com/embarkmobile/zxing-android-minimal/mvn-repo/maven-repository/" }}dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:support-v13:22.2.0' // Zxing minimal libraries compile 'com.embarkmobile:zxing-android-minimal:2.0.0@aar' compile 'com.embarkmobile:zxing-android-integration:2.0.0@aar' compile 'com.google.zxing:core:3.0.1'}
And then just call the barcode using this
new IntentIntegrator(this).initiateScan(); // `this` is the current Activity
In you case, you wanna use a custom layout, so you must create your custom layout following some parameters, such as the layout below:
<?xml version="1.0" encoding="utf-8"?><merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <SurfaceView android:id="@+id/zxing_preview_view" android:layout_width="fill_parent" android:layout_height="fill_parent"/> <com.google.zxing.client.android.ViewfinderView android:id="@+id/zxing_viewfinder_view" android:layout_width="fill_parent" android:layout_height="fill_parent"/> <LinearLayout android:id="@+id/zxing_result_view" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/zxing_result_view" android:visibility="gone" android:baselineAligned="false"> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:padding="@dimen/zxing_standard_padding"> <LinearLayout android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="fill_parent" android:gravity="right|center_vertical"> <ImageView android:id="@+id/zxing_barcode_image_view" android:layout_width="160dip" android:layout_height="wrap_content" android:maxWidth="160dip" android:maxHeight="160dip" android:layout_marginBottom="@dimen/zxing_half_padding" android:adjustViewBounds="true" android:scaleType="centerInside" tools:ignore="ContentDescription"/> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/zxing_msg_default_format" android:textColor="@color/zxing_result_minor_text" android:textStyle="bold" android:paddingRight="@dimen/zxing_half_padding"/> <TextView android:id="@+id/zxing_format_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/zxing_result_minor_text"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/zxing_msg_default_type" android:textColor="@color/zxing_result_minor_text" android:textStyle="bold" android:paddingRight="@dimen/zxing_half_padding"/> <TextView android:id="@+id/zxing_type_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/zxing_result_minor_text"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/zxing_msg_default_time" android:textColor="@color/zxing_result_minor_text" android:textStyle="bold" android:paddingRight="@dimen/zxing_half_padding"/> <TextView android:id="@+id/zxing_time_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/zxing_result_minor_text"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/zxing_meta_text_view_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/zxing_msg_default_meta" android:textColor="@color/zxing_result_minor_text" android:textStyle="bold" android:paddingRight="@dimen/zxing_half_padding"/> <TextView android:id="@+id/zxing_meta_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/zxing_result_minor_text"/> </LinearLayout> </LinearLayout> <ScrollView android:layout_width="wrap_content" android:layout_height="wrap_content"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/zxing_contents_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/zxing_result_text" android:textColorLink="@color/zxing_result_text" android:textSize="22sp" android:paddingLeft="12dip" android:autoLink="web" android:textIsSelectable="true"/> <TextView android:id="@+id/zxing_contents_supplement_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/zxing_result_text" android:textColorLink="@color/zxing_result_text" android:paddingLeft="12dip" android:autoLink="web" android:textIsSelectable="true"/> </LinearLayout> </ScrollView> </LinearLayout> <LinearLayout android:id="@+id/zxing_result_button_view" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center"> <Button style="@style/zxing_ResultButton" android:visibility="gone"/> <Button style="@style/zxing_ResultButton" android:visibility="gone"/> <Button style="@style/zxing_ResultButton" android:visibility="gone"/> <Button style="@style/zxing_ResultButton" android:visibility="gone"/> </LinearLayout> </LinearLayout> <LinearLayout android:layout_gravity="bottom|center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/zxing_status_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|center_horizontal" android:background="@color/zxing_transparent" android:text="@string/zxing_msg_default_status" android:textColor="@color/zxing_status_text"/> <Button android:id="@id/zxing_back_button" android:layout_marginTop="10dp" android:layout_width="fill_parent" android:layout_height="wrap_content" android:height="60dp" android:textAlignment="center" android:layout_gravity="bottom|center_horizontal" android:text="@string/zxing_button_cancel"/> </LinearLayout></merge>
After that, you can set the above layout into integrator
like
IntentIntegrator integrator = new IntentIntegrator(this);integrator.setCaptureLayout(R.layout.custom_layout);integrator.initiateScan();
But remember, you have to follow those parameters. It means that you have to use the same name for all the views.