2012-01-12 125 views
0

我正在開發一個簡單的應用程序使用ViewPager。它具有webview中的內容和圖像。 ViewPager有許多頁面,所有頁面都有相同的數據。圖像不能在webview中加載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> 

SampleActivity.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有不同類型的結構相同內容(文字+圖像)...

問題:活動開始時,圖像中未示出。當我點擊放大時,圖像顯示,當我點擊縮小時,圖像不顯示。

我搜索了,但我沒有找到任何幫助。

+0

請提供所有活動的代碼和任何其他佈局文件。這將有相當大的幫助。 – 2012-01-12 13:08:48

回答

0

首先,我在代碼中看不到setContentView。 A WebView是另一種視圖,如ImageView,TextView ..所以你需要使用setContentView函數。

請注意,您正在使用不同的客戶端WebViewClient()WebChromeClient()您需要知道它們之間的區別,主要區別在於WebViewClient更具可配置性。

您可以至少以2種方式加載網頁內容。

第一個是「加載給定的數據轉換成用‘數據’方案URL的WebView」(使用函數

webView.loadData(html, mime, encoding); 

另一種方式是直接加載的網頁的URL。首先,我建議你做一個正常的網頁,將其保存在文件夾中的資產或SD卡,然後從那裏加載它

這樣的:

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

希望,這^ h一點點。

+0

感謝您的回覆。我正在使用PagerAdopter以下是完整的活動代碼是 – 2012-01-13 05:23:00

+0

我得到了哪裏是問題,當webview添加到佈局(ll.addView(webView);)。如果我們從xml文件中讀取webview沒有問題,任何一個如何解決它 – 2012-01-16 10:01:48