将EditText的全部内容捕获到图片中

时间:2014-04-22 16:44:13

标签: android image android-edittext capture

我必须将文本字段的整个文本打印到图片中。原因是:我必须在Android和其他Web客户端之间使用不支持的UTF-8字符交换消息。对于不支持的UTF-8字符,我的意思是在Android中缺少字体(请参阅this topic here)。我尝试使用直接方法

Bitmap b;
EditText editText = (EditText) findViewById(R.id.editText);
editText.buildDrawingCache();
b = editText.getDrawingCache();
editText.destroyDrawingCache();

在我有多行之前就像魅力一样:解决方案只捕获用户可见的文本,而不是长文本字段内的完整文本(滚动条!)。

我还尝试了generating a picture from a stackoverflow answer的另一种解决方法。这会打印整个文本,但不会像新行一样尊重文本格式。但我不想自己处理所有这些事情。

我被迫使用Android 4.3及更早版本。

  1. 是否有智能方法将文字捕捉到图片中?如果不是:
  2. 是否可以修改上面的代码以使其按预期工作?

1 个答案:

答案 0 :(得分:3)

在寻找解决方案的另外24小时后,我跑了into this solution for a Webview。诀窍是

  1. 生成另一个视图以保留内容,以避免视图下边缘的EditText标记也将打印到图片中
  2. 复制Bitmap以避免在尝试使用Bitmap.compress()后destroyDrawingCache()之后软件渲染器出现问题。
  3. 以下是代码:

    EditText editText = (EditText) findViewById(R.id.editText);
    TextView textView = new TextView(this.getApplicationContext());
    
    textView.setTypeface(editText.getTypeface());
    textView.setText(editText.getText());
    textView.measure(
        View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED),
        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
    textView.layout(0, 0, textView.getMeasuredWidth(), textView.getMeasuredHeight());
    textView.setDrawingCacheEnabled(true);
    textView.buildDrawingCache();
    
    Bitmap b = textView.getDrawingCache().copy(Bitmap.Config.ARGB_8888, false);
    textView.destroyDrawingCache();
    
    try{
        String path = Environment.getExternalStorageDirectory().toString() + "/picture.png";
        OutputStream outputStream = new FileOutputStream(new File(path));
        b.compress(Bitmap.CompressFormat.PNG, 0, outputStream);
        outputStream.flush();
        outputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }