Jam*_*mes 5 pdf android android-layout android-print-framework
当用户选择活动中的共享按钮时,我想夸大布局,填充它,然后使用新的打印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
...
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这会输出一个空白的pdf文档.但是,当我使用屏幕上已存在的视图(在onCreateView(..)中膨胀)时,它会按预期显示在pdf中.
我很感激任何帮助.
Com*_*are 13
如果我的理论是正确的 - 您的膨胀布局仍然具有零宽度和高度 - 您可以调用measure()并layout()手动调整大小和位置:
root.measure(800, 480);
root.layout(0, 0, 800, 480);
Run Code Online (Sandbox Code Playgroud)
给定View命名root,这将使它(及其子节点,如果有的话)填充800像素宽,480像素高的空间(例如,WVGA设备,横向,全屏).在你的情况,你应该能够调用getWidth(),并getHeight()在Canvas确定要使用的大小measure()和layout().
FWIW,就个人而言,我会生成HTML并将其用于打印的基础,而不是布局文件.这是我在这个示例项目中演示的技术之一.