gpt4 book ai didi

Android:在 Canvas 上绘制 xml 布局

转载 作者:行者123 更新时间:2023-12-05 00:01:16 26 4
gpt4 key购买 nike

我有一个自定义的 PrintDocumentAdapter 并自己绘制页面,所以我应该在页面 Canvas 上绘制 xml 布局:

private void drawPage(PdfDocument.Page page, List<Object> objects,
int pageNumber) {
Canvas canvas = page.getCanvas();
...
}

我的 xml 中有一个 TableLayout。我希望表格宽度填满整个页面,但如果宽度大于页面宽度,它会超过页面;如果宽度小于页面宽度,它会小于页面。我同时使用了 wrap_contentmatch_parent 但它们都不起作用。我什至尝试修复宽度和高度。

private void drawPage(PdfDocument.Page page, List<Payment> payments,
int pageNumber) {
Canvas canvas = page.getCanvas();
PdfDocument.PageInfo pageInfo = page.getInfo();

canvas.save();
canvas.translate(leftMargin , topMargin);

FrameLayout frameLayout = new FrameLayout(context);
frameLayout.setLayoutParams(new ViewGroup.LayoutParams(200, 200));
LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = li.inflate(R.layout.payments_table_layout, null);
v.setLayoutParams(new
FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

TableLayout tableLayout = (TableLayout) v.findViewById(R.id.payments_table_layout);

for(int i= 0 ; i< objects.size(); ++i){
//... some code
}

frameLayout.addView(v);
frameLayout.measure(200 , 200);
frameLayout.layout(100, 100, 100, 100);
frameLayout.draw(canvas);
canvas.restore();
}

R.layout.payments_table_layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="some text"
style="@style/CustomFont.Wave"/>
</FrameLayout>
<TableLayout
android:id="@+id/payments_table_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:stretchColumns="*"
android:layout_weight="1">
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="#ccc">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="some text"
android:layout_gravity="center"
android:background="@drawable/table_border"
android:padding="4dp"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="some text"
android:layout_gravity="center"
android:background="@drawable/table_border"
android:padding="4dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="some text"
android:layout_gravity="center"
android:background="@drawable/table_border"
android:padding="4dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="some text"
android:layout_gravity="center"
android:background="@drawable/table_border"
android:padding="4dp"/>
</TableRow>
</TableLayout>
</LinearLayout>

现在结果:
results

最佳答案

我不应该拉伸(stretch) TableLayout 的所有列,所以我将此属性更改为:

android:stretchColumns="1,3,7"  
android:shrinkColumns="5"

并像这样将布局宽度设置为页面宽度(我们应该注意尺寸单位):在我的 customPrintDocumentAdapter

@Override
public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras) {
myPdfDocument = new PrintedPdfDocument(context, newAttributes);

pageHeight =
newAttributes.getMediaSize().getHeightMils()/1000 * 72;
pageWidth =
newAttributes.getMediaSize().getWidthMils()/1000 * 72;

...
}

和我的新drawPage 方法:

private void drawPage(PdfDocument.Page page, List<Payment> payments,
int pageNumber) {
...
frameLayout.setLayoutParams(new ViewGroup.LayoutParams(pageWidth, pageHeight));
...
}

关于Android:在 Canvas 上绘制 xml 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41803494/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com