7

当用户在活动中选择一个共享按钮时,我想膨胀一个布局,填充它,然后使用新的打印 API 将该布局写入 pdf。

在我的片段中,我有

@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 中。

我会很感激任何帮助。

4

1 回答 1

16

如果我的理论是正确的——你的膨胀布局的宽度和高度仍然为零——你可以调用measure()layout()手动调整大小和位置:

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

给定一个View命名的root,这将让它(及其子项,如果有的话)填充 800 像素宽 x 480 像素高的空间(例如,WVGA 设备、横向、全屏)。在您的情况下,您应该能够调用getWidth()andgetHeight()Canvas确定用于measure()and的大小layout()

FWIW,就个人而言,我会生成 HTML 并将其用作打印的基础,而不是布局文件。这是我在这个示例项目中演示的技术之一。

于 2014-07-31T10:49:31.837 回答