Веб-представление, отображаемое без ширины и высоты

#android #react-native #react-android #react-native-modules

Вопрос:

Я строю приложение для смарт POS , используя реагировать родной и собственные модули , чтобы использовать Java Native-функций, и мне нужно отправить изображение билета на принтер, я получаю билет макета в HTML-коде и нужно преобразовать его в изображение, а для этого, я рендеринг этот html-код веб-просмотра, а затем распечатать его в растровое изображение с холста

Проблема: изображение не отображается должным образом, всегда имеет ширину и высоту, равные 0

У меня мало опыта в нативной разработке, так что в моем коде что-то не так?

мой код:

 @ReactMethod
public void print() {
  Activity activity = getCurrentActivity();
  Context context = reactContext.getApplicationContext();
  String path = Environment.getExternalStorageDirectory().getAbsolutePath()   "/DCIM/print.jpg";
  activity.runOnUiThread(new Runnable() {
    @Override
    public void run() {
      WebView wv = new WebView(context);

      wv.loadData("<html><body style='width: 300px; height: 300px'><h1 style='color: #000'>Test</h1></body></html>", "text/html", null);
    
      // mede o tamanho da webview
      wv.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));

      // define o layout da webview
      wv.layout(0, 0, wv.getMeasuredWidth(), wv.getMeasuredHeight());

      // cria um bitmap
      Bitmap bm = Bitmap.createBitmap(wv.getMeasuredWidth(), wv.getMeasuredHeight(), Bitmap.Config.ARGB_8888);

      // desenha o bitmap no canvas
      Paint paint = new Paint();
      Canvas cv = new Canvas(bm);
      int height = bm.getHeight();
      cv.drawBitmap(bm, 0, height, paint);

      wv.draw(cv);

      try {
        FileOutputStream out = new FileOutputStream(path);
        bm.compress(Bitmap.CompressFormat.JPEG, 100, out);
        out.flush();
        out.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  });
}
 

Комментарии:

1. Не уверен, что вы пытаетесь сделать . прежде чем получить размер, вам следует дождаться загрузки страницы . Установите WebViewClient перед загрузкой данные и выполните всю работу по измерению внутри onPageFinished .