【问题标题】:How to Start activity in a new window Using WebView?如何使用 WebView 在新窗口中启动活动?
【发布时间】:2023-03-19 06:48:01
【问题描述】:

我有一个 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 中的图片链接时,图片活动确实会加载。但是,活动被加载到内部片段中,而不是在新窗口中打开(活动通常会这样做)。当我从不同的活动(而不是如上所述的 web 视图内)启动此活动时,活动将按预期在新窗口中打开。从 WebView 启动时如何在新窗口中打开 ImageActivity 的任何想法?

【问题讨论】:

  • 我喜欢你的问题。
  • ImageActivity.class 的类名怎么可能是FullImageActivity?
  • @AnirudhSharma - 对不起,你是对的。为了清楚起见,我在这篇文章中更改了它,忘记重命名所有出现的地方。修好了。
  • 你在startImageView 中尝试了没有getActivity()getActivity().getApplicationContext() 吗?
  • @Wishmaster - 是的,不幸的是它没有用。

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


【解决方案1】:

您所说的在 Android 上是不可能的。 startActivity 永远不会在“片段内部”渲染 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 语句中添加日志。

您的图片上是否有查询参数?即网址实际上是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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 2016-12-14
    • 1970-01-01
    相关资源
    最近更新 更多