如何使用Fragments

时间:2017-09-06 01:06:07

标签: java android android-fragments qr-code zxing

我对Android开发相对较新,到目前为止我还没有达到片段的目的。无论如何,我想为每个签到我的应用的用户创建一个独特的二维码。此QR码填充了我从数据库中检索到的用户信息。现在我遇到的唯一麻烦就是生成所说的qr Code 。我查看过几十个教程,但通常它们对我的用例无效,或者我不能简单地让它们工作。我也查看了 ZXING api ,但这没有用。我要求StackoverFlow社区帮助您做出这一努力,感谢所有帮助

3 个答案:

答案 0 :(得分:7)

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

来自documentation

  

Fragment表示一个行为或用户界面的一部分   活动。您可以将单个活动中的多个片段组合到一起   构建多窗格UI并在多个活动中重用片段。您   可以将片段视为活动的模块化部分,具有   它自己的生命周期,接收自己的输入事件,你可以   在活动运行时添加或删除(有点像" sub   活动"您可以在不同的活动中重复使用。)

     

片段必须始终嵌入活动和片段中   生命周期直接受主机活动生命周期的影响。

您需要阅读Building a Dynamic UI with Fragments来掌握片段。创建片段的步骤(注意,这不是严格的规则):

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

    现在创建QR码部分。您需要确定需要在QR码中显示哪些信息。不要在QR码中提供所有信息,因为您不得将所有用户数据公开给全世界。如果您有超过1个信息字符串,则可以使用";"或其他任何加入文字信息。

    要构建QR代码图片,首先,您需要在应用 build.gradle 中使用以下行添加ZXing library(使用latest version):

    compile 'com.google.zxing:core:3.3.0'
    

    然后使用以下代码创建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;
    }
    

    然后您可以使用它将生成的图像设置为片段中的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;
    }
    

答案 1 :(得分:0)

    try {
Bitmap bitmap= encodeAsBitmap("Muhammad Qasim Android Developer", BarcodeFormat.QR_CODE, Width, Height);

                        if (bitmap!= null) {
                            img.setImageBitmap(bitmap);
                        }
                    } catch (WriterException e) {

                            Log.e(""+e,"Exception");
                    }

答案 2 :(得分:0)

您可以找到here如何创建和使用片段。但是,为了生成QR代码,我发现了一个非常小巧的智能图书馆QRGen

示例代码:

Bitmap myBitmap = QRCode.from("www.example.org").bitmap();
ImageView myImage = (ImageView) findViewById(R.id.imageView);
myImage.setImageBitmap(myBitmap);