2012-01-11 50 views
3

我有一個佈局,並且通過WebView呈現HTML文檔。使用WebView在Android中滾動完美地工作

XML佈局

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:fillViewport="true" 
android:scrollbars="vertical"> 

<RelativeLayout 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical"> 
    <LinearLayout 
     android:id="@+id/header" 
     android:layout_alignParentTop="true" 
     android:layout_width="fill_parent" 
     android:layout_height="30dip" 
     android:background="@drawable/black" 
     android:tileMode="repeat"> 
     <ImageButton 
      android:id="@+id/btnBackHelp" 
      android:src="@drawable/greenarrow" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:background="@drawable/black" 
      android:tileMode="repeat"/> 
     <ImageView 
      android:src="@drawable/logo" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
     </LinearLayout> 
     <LinearLayout 
      android:layout_height="fill_parent" 
      android:layout_width="fill_parent" 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="vertical" 
      android:layout_marginTop="30dip"> 
     <WebView 
      android:layout_height="fill_parent" 
      android:layout_width="fill_parent" 
      android:id="@+id/helpBrowserWebview"/> 
     </LinearLayout> 
     <LinearLayout 
     android:layout_alignParentBottom="true" 
     android:layout_width="fill_parent" 
     android:layout_height="30dip" 
     android:layout_weight="1" 
     android:weightSum="5" 
     android:orientation="horizontal" 
     android:background="@drawable/black" 
     android:tileMode="repeat"> 

    <LinearLayout 
     android:id="@+id/footerLayoutHome" 
     android:clickable="true" 
     android:layout_width="fill_parent" 
     android:layout_weight="1" 
     android:orientation="vertical" 
     android:gravity="center" 
     android:layout_height="fill_parent"> 

     <ImageButton 
      android:id="@+id/footerMainBtnHome" 
      android:layout_width="fill_parent" 
      android:layout_height="14dip" 
      android:src="@drawable/home" 
      android:background="@drawable/black"/> 
     <TextView 
      android:text="Home" 
      android:textSize="8dip" 
      android:textColor="#ffffff" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 
    <LinearLayout 
     android:id="@+id/footerLayoutProducts" 
     android:clickable="true" 
     android:layout_width="fill_parent" 
     android:layout_weight="1" 
     android:orientation="vertical" 
     android:gravity="center" 
     android:layout_height="fill_parent"> 

     <ImageButton 
      android:id="@+id/footerMainBtnProducts" 
      android:layout_width="fill_parent" 
      android:layout_height="14dip" 
      android:src="@drawable/products" 
      android:background="@drawable/black"/> 
      <TextView 
      android:text="Products" 
      android:textSize="8dip" 
      android:textColor="#ffffff" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 
    <LinearLayout 
     android:id="@+id/footerLayoutCart" 
     android:clickable="true" 
     android:layout_width="fill_parent" 
     android:layout_weight="1" 
     android:orientation="vertical" 
     android:gravity="center" 
     android:layout_height="fill_parent"> 

     <ImageButton 
      android:id="@+id/footerMainBtnCart" 
      android:layout_width="fill_parent" 
      android:layout_height="14dip" 
      android:src="@drawable/cart" 
      android:background="@drawable/black"/> 
     <TextView 
      android:text="Cart" 
      android:textSize="8dip" 
      android:textColor="#ffffff" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 
    <LinearLayout 
     android:id="@+id/footerLayoutFeedback" 
     android:clickable="true" 
     android:layout_width="fill_parent" 
     android:layout_weight="1" 
     android:orientation="vertical" 
     android:gravity="center" 
     android:layout_height="fill_parent"> 

     <ImageButton 
      android:id="@+id/footerMainBtnFeedback" 
      android:layout_width="fill_parent" 
      android:layout_height="14dip" 
      android:src="@drawable/feedback" 
      android:background="@drawable/black"/> 
     <TextView 
      android:text="Feedback" 
      android:textSize="8dip" 
      android:textColor="#ffffff" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 
    <LinearLayout 
     android:id="@+id/footerLayoutHelp" 
     android:clickable="true" 
     android:layout_width="fill_parent" 
     android:layout_weight="1" 
     android:orientation="vertical" 
     android:gravity="center" 
     android:layout_height="fill_parent"> 

     <ImageButton 
      android:id="@+id/footerMainBtnHelp" 
      android:layout_width="fill_parent" 
      android:layout_height="14dip" 
      android:src="@drawable/help" 
      android:background="@drawable/black"/> 
     <TextView 
      android:text="Help" 
      android:textSize="8dip" 
      android:textColor="#ffffff" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

    </LinearLayout> 



     </LinearLayout> 
</RelativeLayout> 
</ScrollView> 

Java代碼

try { 
      InputStream is = getAssets().open("help.html"); 

      int size = is.available(); 

      // Read the entire asset into a local byte buffer. 
      byte[] buffer = new byte[size]; 
      is.read(buffer); 
      is.close(); 

      // Convert the buffer into a Java string. 
      String text = new String(buffer); 

      final String mimeType = "text/html"; 
      final String encoding = "utf-8"; 

      // Finally stick the string into the web view. 
      WebView wv = (WebView)findViewById(R.id.helpBrowserWebview); 
      wv.loadData(text, mimeType, encoding); 
     } catch (IOException e) { 
      // Should never happen! 
      throw new RuntimeException(e); 
     } 

任何URL我打電話,我不能滾動,甚至調用存儲在資源文件夾我不能滾動的HTML。 期待您的回覆。謝謝。

回答

5

我發現這個問題的更好的答案。事實證明,WebView確實有你所期望的scrollTo(),getScrollX()getScrollY()方法。它們在文檔中有點隱藏,因爲它們是從View繼承的(通過AbsoluteLayout - >ViewGroup - > View)。這顯然是一個更好的方式來操縱WebView's滾動位置比有點繁瑣的JavaScript界面​​。

+0

謝謝任何​​非常有用的代碼示例。 – Mukunda 2012-01-11 13:40:58

+0

首先,如果你從中學到了東西,那永遠不會浪費時間編寫代碼。 :-) 如果您有任何疑問,請嘗試您的Self,然後請告訴我 – 2012-01-11 13:44:49

+0

感謝您的信息,我只需進行更改就不必使用'scrollTo()','getScrollX()'和'getScrollY()'在佈局中,如果WebView父級是ScrollView,則WebView的滾動不起作用。 所以我使用LinearLayout,然後在LinearLayout中調用WebView。 如果有人想使用ScrollView,然後將ScrollView作爲父Layout,則在ScrollView下使用LinearLayout並在LinearLayout下使用WebView,並且它可以很好地工作。 – Mukunda 2012-01-12 10:12:04

1

嘗試

wv.setWebChromeClient(new WebChromeClient()); 

wv.loadData(text, mimeType, encoding); 

try塊之前還做findViewById。

+0

我已經嘗試過,但沒有工作和滾動的WebView不起作用,如果它在ScrollView內,但將ScrollView作爲父佈局,然後採取Linearlayout內部ScrollView和LinearLayout內部聲明一個WebView,它完美的作品。 – Mukunda 2012-01-12 10:06:24