如何使用片段创建Android的QR码生成器

saj*_*211 1 java android qr-code zxing android-fragments

我对android开发来说相对较新,到目前为止,我还没有达到片段的目的。无论如何,我正在尝试为登录我的应用程序的每个用户创建唯一的QR码。此QR码中填充了我从数据库中检索到的用户信息。现在,我遇到的唯一麻烦是生成了所述qr Code。我浏览了数十本教程,但通常对于我的用例而言,它们会变得无效,或者我无法简单地使它们工作。我也浏览了ZXING api,但这无济于事。我要求StackoverFlow社区提供帮助,并感谢所有帮助

ישו*_*ותך 9

Activity和Fragment之间的用法略有不同。它们都可以用于显示UI。要使用片段,您需要Activity作为其宿主,因为Fragment必须始终嵌入到Activity中。

文档中

片段表示活动中的行为或用户界面的一部分。您可以在一个活动中组合多个片段以构建多窗格UI,并在多个活动中重用一个片段。您可以将片段视为活动的模块化部分,该片段具有自己的生命周期,接收自己的输入事件,并且可以在活动运行时添加或删除(类似于“子活动”,您可以在不同的活动中重复使用)。

片段必须始终嵌入活动中,并且片段的生命周期直接受到宿主活动的生命周期的影响。

您需要阅读使用片段构建动态UI才能掌握片段。创建片段的步骤(注意,这不是严格的规则):

  1. 创建活动作为主机
  2. 创建活动的布局。在其中,您需要创建一个FrameLayout视图作为片段持有者。
  3. 通过扩展Fragment类创建Fragment
  4. 为片段创建UI布局
  5. 使用FragmentTransaction将片段附加到Activity

现在,创建QR码部分。您需要确定哪些信息需要在QR码中显示。不要在QR码中提供所有信息,因为您不得将所有用户数据公开。如果信息字符串多于1个,则可以使用“;” 或其他可以加入文字信息的地方。

要构建QR码图像,首先,您需要在应用程序build.gradle中使用以下行来包含ZXing库(使用最新版本):

compile 'com.google.zxing:core:3.3.0'
Run Code Online (Sandbox Code Playgroud)

然后使用以下代码创建QR码位图:

private Bitmap textToImage(String text, int width, int height) throws WriterException, NullPointerException {
  BitMatrix bitMatrix;
  try {
    bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.DATA_MATRIX.QR_CODE, 
                   width, height, null);
  } catch (IllegalArgumentException Illegalargumentexception) {
    return null;
  }

  int bitMatrixWidth = bitMatrix.getWidth();
  int bitMatrixHeight = bitMatrix.getHeight();
  int[] pixels = new int[bitMatrixWidth * bitMatrixHeight];

  int colorWhite = 0xFFFFFFFF;
  int colorBlack = 0xFF000000;

  for (int y = 0; y < bitMatrixHeight; y++) {
    int offset = y * bitMatrixWidth;
    for (int x = 0; x < bitMatrixWidth; x++) {
      pixels[offset + x] = bitMatrix.get(x, y) ? colorBlack : colorWhite;
    }
  }
  Bitmap bitmap = Bitmap.createBitmap(bitMatrixWidth, bitMatrixHeight, Bitmap.Config.ARGB_4444);

  bitmap.setPixels(pixels, 0, width, 0, 0, bitMatrixWidth, bitMatrixHeight);
  return bitmap;
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用它来将生成的图像设置为Fragment中的ImageView,如下所示:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {
  View view = inflater.inflate(R.layout.your_fragment_layout, container, false);
  ImageView imvQrCode = (ImageView) view.findViewById(R.id.your_image_view);

  Bitmap bitmap = textToImage("your_text_info", 500, 500);
  imageView.setImageBitmap(bitmap);

  return view;
}
Run Code Online (Sandbox Code Playgroud)