2012-01-12 3 views
0

ViewPager를 사용하여 간단한 앱을 개발 중입니다. 웹 뷰에는 내용과 이미지가 있습니다. 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

모든 활동 코드 및 기타 레이아웃 파일을 제공해주십시오. 이것은 상당히 도움이 될 것입니다. –

답변

0

먼저 코드에 setContentView이 표시되지 않습니다. WebViewImageView, TextView과 같은 다른보기입니다. 따라서 setContentView 기능을 사용해야합니다.

WebViewClient()WebChromeClient()의 차이점을 알아야한다는 점에 유의하십시오. 가장 큰 차이점은 WebViewClient이 더 구성 가능하다는 것입니다.

적어도 2 가지 방법으로 웹 콘텐츠를로드 할 수 있습니다.

첫 번째 함수

webView.loadData(html, mime, encoding); 

다른 방법은 직접 웹 페이지의 URL을로드를 사용하여 ("는 '데이터'계획의 URL을 사용하여 WebView에 주어진 데이터를로드합니다."시작하는 것입니다, 난 당신이, 일반 웹 페이지를 할 자산 폴더 또는 SD 카드에 저장하고 거기에서로드하는 권 해드립니다 이와 같이

:.

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

희망이 시간 약간의 elps.

+0

재생 해 주셔서 감사합니다. 다음은 전체 활동 코드가 –

+0

인 PagerAdopter를 사용하고 있습니다. webview가 레이아웃 (ll.addView (webView);)에 추가 할 때 문제가있는 곳이 있습니다. 우리가 xml 파일에서 webview를 읽는다면 아무런 문제도없고, 어떤 문제를 해결하는 방법 –