android:使用Intent共享格式化数据

时间:2014-10-01 19:50:45

标签: java android android-intent

我正在使用此代码使用Intent共享我的数据;

SpannableStringBuilder shareBuilder = new SpannableStringBuilder();
String input = "Input String";
SpannableString greenSpannable= new SpannableString(input);
greenSpannable.setSpan(new ForegroundColorSpan(Color.parseColor("#678a00")), 0, input.length(), 0);
greenSpannable.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0,input.length(), 0);
shareBuilder.append(greenSpannable);
Intent shareIntent=new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, shareBuilder.toString());
context.startActivity(Intent.createChooser(shareIntent, "Select:"));

正如您在代码中看到的,我使用SpannableStringBuilderSpannableString来格式化结果,但是当我在结果中没有显示任何内容时。我错过了什么吗? Intent是否支持共享格式化字符串?例如,当我将shareBuilder对象显示在TextView中时,它会显示我的预期。例如,为了在TextView中显示,我应该为BufferType.SPANNABLE方法设置一个名为setText的第二个参数:

txt.setText(shareBuilder, BufferType.SPANNABLE);

现在,如何为我的意图设置BufferType?或者我应该为我的Intent对象设置什么MIME类型来传递我的格式化数据?
有什么想法吗?

2 个答案:

答案 0 :(得分:2)

  

我错过了什么吗?

您正在将SpannableStringBuilder转换为String,因为您要将其放入附加内容中,删除所有格式。

此外,text/plain并不表示应存在任何格式。

最后,虽然您可以将SpannableStringBuilder直接作为CharSequence添加到附加内容中,但它仍可能会在共享应用程序的一侧转换为String,不要求应用支持共享格式化内容。

  

或者我应该为我的Intent对象设置什么MIME类型来传递我的格式化数据?

您可以生成HTML而不是Spanned,并使用text/html。我不知道MIME类型的约定实际上是CharSequence格式化的SpannableStringBuilder

答案 1 :(得分:0)

您可以使用该界面在不同活动之间发送数据,在特定事件期间触发侦听器并在目标活动中监听事件