我想使用PdfDocumentKitKat中引入的android类从View生成PDF文件.我设法做到了,文件到目前为止生成正常,最终得到了正确的PDF.唯一的问题是文件很大,只有一页12Mb.有没有办法减少文件大小?
我用来生成PDF的代码是:
public static File generateDocument(Activity activity, String fileName, ViewGroup container) throws IOException{
File f = new File(activity.getExternalFilesDir(null), fileName);
PdfDocument document = new PdfDocument();
try{
for(int i=0;i<container.getChildCount();i++){
View v = container.getChildAt(i);
PdfDocument.PageInfo.Builder pageBuilder = new PdfDocument.PageInfo.Builder(v.getWidth(), v.getHeight(), i);
Page page = document.startPage(pageBuilder.create());
v.draw(page.getCanvas());
document.finishPage(page);
}
document.writeTo(new FileOutputStream(f));
} finally{
if(document!=null){
document.close();
}
}
return f;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个自定义视图,从该视图扩展MaterialButton并在代码中应用样式,因此我不需要在xml中进行操作。
class CustomRedButton @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : MaterialButton(ContextThemeWrapper(context, R.style.ButtonRedStyle), attrs, defStyleAttr)
Run Code Online (Sandbox Code Playgroud)
风格是:
<style name="ButtonRedStyle"
parent="Widget.MaterialComponents.Button.TextButton">
<item name="backgroundTint">@color/red</item>
<item name="rippleColor">@color/grey</item>
<item name="strokeWidth">1dp</item>
<item name="strokeColor">@color/black</item>
</style>
Run Code Online (Sandbox Code Playgroud)
一切正常,但backgroundTint财产。由于某种原因,背景颜色没有改变,并且具有主题的原色。但是,如果我尝试将样式应用于MaterialButtonxml中,则会更改颜色。
知道为什么会发生或如何实现吗?