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

Oha*_*had 5 android android-webview android-fragments android-viewpager android-activity

我有一个 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;
       }

    });
Run Code Online (Sandbox Code Playgroud)

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);
...
}
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml

...
        <activity
            android:name="com.example.main.ImageActivity"
            android:label="Picture"
            android:screenOrientation="portrait"
        >
        </activity>
...
Run Code Online (Sandbox Code Playgroud)

当我单击网络视图内的图像链接时,图像活动确实会加载。但是,活动会加载到片段内,而不是在新窗口中打开(就像活动通常所做的那样)。当我从另一个活动(而不是如上所述的 Web 视图内)启动此活动时,该活动将按预期在新窗口中打开。从 WebView 启动时如何在新窗口中打开 ImageActivity 有什么想法吗?

Blu*_*ell 0

你说的这种情况在安卓上是不可能的。startActivity永远不会在“片段内部”渲染活动。因此,一旦排除了不可能的事情,剩下的无论多么不可能,都一定是事实。

if (url.toLowerCase().endsWith(".png") || url.toLowerCase().endsWith(".jpg") || url.toLowerCase().endsWith(".jpeg")) {
                startImageView(url);
            } else {
                view.loadUrl(url);
            }
Run Code Online (Sandbox Code Playgroud)

您的 if 语句很可能进入 ELSE 部分,因此 WebView 正在加载图像。

您是否有您加载的图像的 url 示例 - 也许将日志添加到此 if else 语句中。

您的图像上有查询参数吗?即实际上是网址吗www.foo.com/bar/image.png?w=300h=300?因此endsWith不会起作用。尝试改成这样:url.toLowerCase().contains(".png")

IE

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);
}
Run Code Online (Sandbox Code Playgroud)