我想使用Zbar自定义布局来扫描条形码。
问题:
正如你所看到的那样,相机没有采用整个画面布局。它取的是宽度,而不是高度。为什么会发生这种情况?
代码:
qrscannerzbarlayout.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:id="@+id/zbar_layout_area"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello"
/>
</LinearLayout>
<FrameLayout
android:id="@+id/frmQr"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/ll_footerx"
android:layout_below="@+id/zbar_layout_area"
android:layout_centerHorizontal="true" >
</FrameLayout>
<RelativeLayout
android:id="@+id/ll_footerx"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_alignParentBottom="true"
android:layout_marginBottom="5dp" >
<TextView
android:id="@+id/tv_line123"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="Place barcode in screen view and hold steady"
android:textSize="14sp"
android:textStyle="bold" />
<Button
android:id="@+id/button_back"
android:layout_width="100dp"
android:layout_height="48dp"
android:layout_alignParentLeft="true"
android:layout_below="@id/tv_line123"
android:layout_marginLeft="40dp"
android:layout_marginTop="15dp"
android:background="@drawable/trailsky"
android:text="WONT SCAN" />
<Button
android:id="@+id/button_nobarcode"
android:layout_width="100dp"
android:layout_height="48dp"
android:layout_alignParentRight="true"
android:layout_below="@id/tv_line123"
android:layout_marginRight="40dp"
android:layout_marginTop="15dp"
android:background="@drawable/passyellow"
android:text="NO BARCODE" />
</RelativeLayout>
</RelativeLayout>
线性布局用于放置标题,框架布局以放置相机预览以及相对布局以放置页脚。
这是java代码:(我只是复制它的一部分)
public class ZBarScannerActivity extends Activity implements Camera.PreviewCallback, ZBarConstants{
Button btnnobarcode;
@SuppressWarnings("unused")
private static final String TAG = "ZBarScannerActivity";
private CameraPreview mPreview;
private Camera mCamera;
private ImageScanner mScanner;
private Handler mAutoFocusHandler;
private boolean mPreviewing = true;
static {
System.loadLibrary("iconv");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
if(!isCameraAvailable()) {
// Cancel request if there is no rear-facing camera.
cancelRequest();
return;
}
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.qrscannerzbar_layout);
btnnobarcode=(Button)findViewById(R.id.button_nobarcode);
btnnobarcode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(ZBarScannerActivity.this,AddCardDetails.class);
i.putExtra("result","");
startActivity(i);
finish();
}
});
mAutoFocusHandler = new Handler();
// Create and configure the ImageScanner;
setupScanner();
// Create a RelativeLayout container that will hold a SurfaceView,
// and set it as the content of our activity.
mPreview = new CameraPreview(this, this, autoFocusCB);
//setContentView(mPreview);
FrameLayout zbarLayout = ( FrameLayout) findViewById(R.id.frmQr);
mPreview.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
zbarLayout.addView(mPreview);
}