未在Web视图ViewPager中加载图像



我正在使用ViewPager开发一个简单的应用程序。它在网络视图中包含内容和图像。ViewPager有多个页面,所有页面都有相同的数据。

content.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >
    <android.support.v4.view.ViewPager
        android:id="@+id/content_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="5dp"
        android:paddingLeft="9dp"
        android:paddingRight="9dp"
        android:paddingTop="5dp" />
</RelativeLayout>

示例活动.java:包com.android.sample;

import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.SimpleOnPageChangeListener;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.RelativeLayout;
public class SampleActivity extends Activity {
    public static ViewPager contentPager;
    public static ContentPagerAdapter  contentPagerAdapter;
    public static List<String> mPages;
    public static SampleActivity context;
    int _position;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.content);
        context = this;
        mPages = new ArrayList<String>();
        for(int i =0;i<20;i++) {
            mPages.add("<html><head><meta charset="utf-8"></head><html><head><style type="text/css"> img { max-width:100%; max-height:100%; } </style></head><body><p>   "+ i +" <br>  <img alt="" class="alignleft" height="160" src="http://yourstory.in/wp-content/uploads/2011/10/vakil_search_n.jpg" style="margin: 5px;" title="vakil search" width="280" /><em>Lawyers at </em><a href="http://yourstory.in/?s=vakilsearch" target="_blank"><em>VakilSearch </em></a><em>shed some light</em></p><p>The categorisation of an expense as revenue expenditure or capital expenditure has been a perpetual ground for litigation between assessees and the authorities.</p>");
        }
        contentPager = (ViewPager) findViewById(R.id.content_pager);
        contentPagerAdapter = new ContentPagerAdapter();
        contentPager.setAdapter(contentPagerAdapter);
        contentPager.setOnPageChangeListener(new PageListener());
        contentPager.setCurrentItem(0 );     
    }
    class PageListener extends SimpleOnPageChangeListener {
            public void onPageScrollStateChanged (int state){
                //Log.d(TAG, "onPageScrollStateChanged  state  " + state+ " _position  "+_position + "webView"+webView);
        }
        public void onPageScrolled (int position, float positionOffset, int positionOffsetPixels){
                //Log.d(TAG,"onPageScrolled Target webViewPrevious : " + webViewPrevious + " webView " + webView );
        }
        public void onPageSelected(int position) {
            _position = position;
            //  TextView pageNumberView = (TextView) context.findViewById(R.id.page_no);
            //pageNumberView.setText("" + (position + 1) + " of " + (viewNumber));
        }
    }

    public  class ContentPagerAdapter extends PagerAdapter {
        String html="";
        WebView webView;
        @Override
        public void destroyItem(View collection, int position, Object view) {
            //clearALlVedios();
            ((ViewPager) collection).removeView((RelativeLayout) view);
        }
        @Override
        public void finishUpdate(View arg0) {
        }
        @Override
        public int getCount() {
            return mPages.size();
        }
        @Override
        public Object instantiateItem(View collection, int position) {
            RelativeLayout ll = new RelativeLayout(context);
            webView = new WebView(context);
            String content;
            try {
                content =  mPages.get(position) + "<br>  ";
            }
            catch (Exception e) {
                content="";
            }
            webView.clearCache(true);
            webView.getSettings().setJavaScriptEnabled(true);
            /// webView.getSettings().setLoadWithOverviewMode(false);
            webView.getSettings().setPluginsEnabled(true);
            webView.getSettings().setBuiltInZoomControls(true);
            webView.requestFocusFromTouch();
            webView.setWebChromeClient(new WebChromeClient());
            //webView.getSettings().setUseWideViewPort(false);
            webView.getSettings().setLoadsImagesAutomatically(true);
            webView.setWebViewClient(new WebViewClient());
            //  webView.getSettings().setUseWideViewPort(true);
            //webView.getSettings().
            /*int scale = ((int) (100 * ( webView.getScale()))) + 10 ;
                Log.i(TAG, "zoom scale  : "+ scale);
                webView.setInitialScale( scale );*/
            //  webView.setVerticalScrollBarEnabled(false);
            //  webView.setHorizontalScrollBarEnabled(false);
            //webView.setInitialScale(140);
            html = "<p >"+ content+ " </p>";
            ll.setPadding(8, 8, 2, 8);
            final String mime = "text/html";
            final String encoding = "utf-8";            
            webView.loadDataWithBaseURL(null, html, mime, encoding, null);
            webView.setWebViewClient(new WebViewClient(){
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    if (url != null && ((url.startsWith("http://")) || (url.startsWith("https://")) || (url.startsWith("www.")))) {
                        view.getContext().startActivity(
                                new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                        return true;
                    } else {
                        return false;
                    }
                }
            });
            ll.addView(webView);
            ((ViewPager) collection).addView(ll);
            ll.setTag(position);
            return ll;
        }
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == ((RelativeLayout) object);
        }
        @Override
        public void restoreState(Parcelable arg0, ClassLoader arg1) {
        }
        @Override
        public Parcelable saveState() {
            return null;
        }
        @Override
        public void startUpdate(View arg0) {
        }
        @Override
        public int getItemPosition(Object object) {
            return POSITION_NONE;
        }
    }
}

html有不同类型的内容(文本+图像),结构相同。。。

问题:活动开始时,不会显示图像。当我点击放大时,图像会显示,当我点击缩小时,图像不会显示。

我找了一下,但没有找到任何帮助。

首先,我在您的代码中没有看到setContentViewWebView是与ImageViewTextView类似的另一视图。。所以您需要使用setContentView函数。

请注意,对于不同的客户端WebViewClient()WebChromeClient(),您需要知道它们之间的区别,主要区别在于WebViewClient更易于配置。

您可以通过至少两种方式加载web内容。

第一个是"使用‘数据’方案URL将给定数据加载到WebView中"(使用功能

webView.loadData(html, mime, encoding);

另一种方式是直接加载网页的URL。首先,我建议你做一个普通的网页,把它保存在资产文件夹或SD卡中,然后从那里加载。

像这样:

wview.loadUrl("file:///mnt/sdcard/yourfolder/yourpage.html");
wview.loadUrl("file:///android_asset/yourpage.html");

希望,这有点帮助。

最新更新