如何使用WebView在新窗口中启动活动?

时间:2015-04-28 08:56:20

标签: android android-fragments android-activity android-viewpager android-webview

我有一个里面有几个片段的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?

1 个答案:

答案 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);
}