android - 如何使用 WebView 在新窗口中启动 Activity ?

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

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

相关文章:

android - 从我的应用程序打开 Tumblr 应用程序?

android - 如何在android studio中更改应用程序的版本

java - fragment 不兼容的类型错误

android - 如何在 Android 上创建 Preference Activity 和 Preference Fragment?

android - Grid View Pager 中的 ScrollView 不适用于 Android Wear

安卓暂停动画

android - 我们如何才能实现 120Hz - 240Hz 的 iOS 频闪率

mysql - 数据库实现以保存用户 Activity 信息

Android 应用程序在构建时不断崩溃。调试器只显示很少的内容

android - 链式启动多项 Activity