Android: раздувая макет и записывая его в PDF, получается пустой PDF

Когда пользователь выбирает кнопку "Поделиться" внутри действия, я хотел бы накачать макет, заполнить его, а затем записать этот макет в pdf, используя новый API печати.

В моем фрагменте у меня есть

@TargetApi(Build.VERSION_CODES.KITKAT)
  public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
    switch (item.getItemId()) {
      case R.id.menu_item_share_context:
        LayoutInflator inflator = getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View container = inflator.inflate(R.layout.person_share, null, false);
        TextView name = (TextView)topContainer.findViewById(R.id.person_name);
        name.setText("Test Name");
        PdfDocument document = new PdfDocument();
        PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(612, 792, 1).create()
        PdfDocument.Page page = document.startPage(pageInfo)
        container.draw(page.getCanvas());
        document.finishPage(page)

        // write pdf
        ...

Это, к сожалению, выводит пустой PDF-документ. Однако, когда я использую представление, которое уже существует на экране (завышенное в onCreateView(..)), оно отображается в формате PDF, как и ожидалось.

Буду признателен за любую помощь.

1 ответ

Если моя теория верна - что ваш раздутый макет по-прежнему имеет ширину и высоту ноль - вы можете позвонить measure() а также layout() для ручного размера и расположения вещей:

root.measure(800, 480);
root.layout(0, 0, 800, 480);

Учитывая View названный root, он будет иметь (и его дочерние элементы, если они есть) заполнять пространство шириной 800 пикселей и 480 пикселей (например, устройство WVGA, альбомная ориентация, полноэкранный режим). В вашем случае вы должны иметь возможность позвонить getWidth() а также getHeight() на Canvas определить размеры для использования measure() а также layout(),

Лично я бы сгенерировал HTML и использовал его для печати, а не для файла макета. Это одна из техник, которые я демонстрирую в этом примере проекта.

Другие вопросы по тегам