我有一个 ViewPager,里面有几个 fragment ,其中一个包含一个 webview。在该 WebView 中,我想在我用来显示图像的指定 Activity 中打开指向图像 (jpeg/png) 的链接:
MyFragment.java
webView.setWebViewClient(new WebViewClient() {
public void startImageView(String url) {
Intent imageIntent = new Intent(getActivity(), ImageActivity.class);
imageIntent.putExtra(ImageActivity.IMAGE_URL, Uri.parse(url));
startActivity(imageIntent);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
if (url.toLowerCase().endsWith(".png") || url.toLowerCase().endsWith(".jpg") || url.toLowerCase().endsWith(".jpeg")) {
startImageView(url);
} else {
view.loadUrl(url);
}
return false;
}
});
ImageActivity.java
public class ImageActivity extends ActionBarActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_full_size);
...
}
AndroidManifest.xml
...
<activity
android:name="com.example.main.ImageActivity"
android:label="Picture"
android:screenOrientation="portrait"
>
</activity>
...
当我点击 webview 中的图像链接时,图像 Activity 确实加载了。但是, Activity 加载到 fragment 的内部,而不是在新窗口中打开( Activity 通常这样做)。当我从另一个 Activity (而不是在上面提到的 webview 中)开始这个 Activity 时, Activity 按预期在新窗口中打开。从 WebView 启动时如何在新窗口中打开 ImageActivity 有什么想法吗?
最佳答案
您所说的在 Android 上是不可能的。 startActivity
永远不会在“fragment 内部”呈现 Activity。因此,一旦你排除了不可能,剩下的,无论多么不可能,都一定是事实。
if (url.toLowerCase().endsWith(".png") || url.toLowerCase().endsWith(".jpg") || url.toLowerCase().endsWith(".jpeg")) {
startImageView(url);
} else {
view.loadUrl(url);
}
您的 if 语句很可能进入 ELSE 部分,因此 WebView 正在加载图像。
您是否有您加载的图像的 url 示例 - 也许将日志添加到此 if else 语句中。
你的图片有查询参数吗?即 url 实际上是 www.foo.com/bar/image.png?w=300h=300
吗?因此 endsWith
将不起作用。尝试更改为:url.toLowerCase().contains(".png")
即
String candidateUrl = url.toLowerCase();
if (candidateUrl.contains(".png")
|| candidateUrl.contains(".jpg")
|| candidateUrl.contains(".jpeg")) {
Log.d("MyTag", "Start a new activity for: " + url);
startImageView(url);
} else {
Log.d("MyTag", "Load inside webview " + url);
view.loadUrl(url);
}
关于android - 如何使用 WebView 在新窗口中启动 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29914776/