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 и использовал его для печати, а не для файла макета. Это одна из техник, которые я демонстрирую в этом примере проекта.