我有一个里面有几个片段的ViewPager,其中一个包含一个webview。在WebView中,我想在指定的活动中打开图像链接(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中的图像链接时,图像活动确实会加载。但是,活动在片段中加载 ,而不是在新窗口中打开(如活动通常那样)。当我从不同的活动(而不是如上所述的webview内)开始此活动时,活动将按预期在新窗口中打开。有什么想法从WebView启动时如何在新窗口中打开ImageActivity?
答案 0 :(得分:0)
你在Android上说的是不可能的。 startActivity
永远不会在片段内部呈现活动&#34;&#34;。因此,一旦你消除了不可能的事物,无论多么不可能,无论剩下什么,都必须是真理。
if (url.toLowerCase().endsWith(".png") || url.toLowerCase().endsWith(".jpg") || url.toLowerCase().endsWith(".jpeg")) {
startImageView(url);
} else {
view.loadUrl(url);
}
您的if语句最有可能进入ELSE部分,因此WebView正在加载图像。
你有一个你加载的图片的网址示例 - 可能会在if if语句中添加日志。
您的图片上是否有查询参数?即实际上是网址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);
}