我被这个问题困扰了好几天。我正在制作的应用程序,可以阅读由wordpress网站生成的rss新闻。一些帖子有外部pdf文件的链接,我需要从我的应用程序在谷歌文档查看器打开这些文件。我成功地在TextView和Html中解析新闻(fromHtml…)和SetMovementh显示可点击的链接并点燃浏览器。问题是当链接有。pdf文件时,它们被下载,但是,如预期的那样,默认情况下不能打开。我需要一些方法,可以所有链接(href)以。pdf结尾,从TextView,使用谷歌文档查看器打开,例如:... 如果url isEnding(.pdf),则使用GogleDocs打开,否则常规打开url…
public class ShowDetails extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.details);
TextView detailsTitle = (TextView)findViewById(R.id.detailstitle);
TextView detailsPubdate = (TextView)findViewById(R.id.detailspubdate);
TextView detailsSadrzajPosta = (TextView)findViewById(R.id.detailssadrzaj_posta);
TextView detailsLink = (TextView)findViewById(R.id.detailslink);
Bundle bundle = this.getIntent().getExtras();
detailsTitle.setText(bundle.getString("keyTitle"));
detailsPubdate.setText(bundle.getString("keyPubdate"));
detailsSadrzajPosta.setText(Html.fromHtml(bundle.getString("keySadrzajPosta")));
detailsSadrzajPosta.setMovementMethod(LinkMovementMethod.getInstance());
}
}
和my detail.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/detailstitle" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/detailspubdate" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/detailssadrzaj_posta"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:autoLink="web"
android:id="@+id/detailslink" />
</LinearLayout>
在google文档查看器中查看pdf(复制自:https://www.b4x.com/android/forum/threads/intent-for-drive-pdf-viewer.53268/):
Private i As Intent
i.Initialize(i.ACTION_VIEW, "file:///" & File.DirDefaultExternal & "/myPDF.pdf")
i.SetComponent("com.google.android.apps.docs/com.google.android.apps.viewer.PdfViewerActivity")
StartActivity(i)
要覆盖TextView
的链接行为,您需要使用Spannable
并将TextView中现有的链接(URLSpan
)替换为您自己的ClickableSpan
。或者更简单的使用库Textoo。
结合两者,解决方案看起来像:
TextView textViewWithLinks = Textoo
.config((TextView) findViewById(R.id.my_text_view))
.addLinksHandler(new LinksHandler() {
@Override
public boolean onClick(View view, String url) {
if (url.endsWith(".pdf")) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
i.setClassName("com.google.android.apps.docs", "com.google.android.apps.viewer.PdfViewerActivity");
startActivity(i);
return true;
} else {
return false;
}
}
})
.apply();