Первый раз использую WebView — все еще нужна помощь

#android

#Android

Вопрос:

Я все еще пытаюсь создать действие, имитирующее техническое руководство. В предыдущем вопросе было предложено, чтобы я мог использовать WebView в своей деятельности, а затем просто создать и вызвать фактическую веб-страницу / html-документ (который будет содержать технические инструкции, подобные моему руководству). Это похоже на то, что я хочу сделать….

Я создал простую веб-страницу под названием test.htm и поместил его в свою папку RAW, а затем попытался реализовать приведенный ниже код в рамках моей деятельности. Мой вопрос заключается в следующем: Как мне настроить мой XML-файл для использования WebView? Нужен ли мне вообще XML-файл? Занимает ли строка WebView …. место setContentView? Может кто-нибудь помочь мне уточнить, как именно использовать WebView в моей деятельности?

Activity5 публичного класса расширяет Activity {

 @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

WebView manual=new WebView(null);
manual.loadData(Utilities.getData(this, R.raw.test),"text/html", "utf-8");
  

..дополнительный код….

но пока просто пытаюсь понять, как WebView работает в контексте действия и в отношении любых требуемых представлений XML.

Спасибо!

Ответ №1:

Как мне настроить мой XML-файл для использования WebView?

Просто создайте обычный файл макета с WebView в нем. С точки зрения макета a WebView существенно не отличается, скажем, от a ListView .

Нужен ли мне вообще XML-файл?

Если все действие будет просто a WebView , вы могли бы создать a WebView в Java-коде и передать его в setContentView() . Однако, пожалуйста, передайте Activity в качестве параметра WebView конструктору, а не null .

Может кто-нибудь помочь мне уточнить, как именно использовать WebView в моей деятельности?

Я бы порекомендовал вам вставить свой HTML в assets/test.html и использовать file:///android_asset/test.html с loadUrl() тем, что вы делаете сейчас.

Комментарии:

1. Хорошо … не уверен на 100%, почему вы делаете некоторые из приведенных выше предложений (т. Е. Зачем использовать loadUrl по сравнению с loadData..

Ответ №2:

Это работает для файла «help/index.html » в ресурсах относительные ссылки на другие файлы ресурсов работают должным образом.

Я добавил функциональность кнопки «Назад»:

 public class WebHelp extends Activity {
    WebView wv = null ;
    TextView txtvTitle ;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.help_layout);

        wv = (WebView) findViewById(R.id.help_webview) ;

        wv.getSettings().setBuiltInZoomControls(true) ;   // enable pinch-to-zoom
        wv.setWebViewClient(wvClient) ;

        txtvTitle = (TextView) findViewById(R.id.help_title) ;

        // ''/android_asset'' is a special prefix for asset file Url's
        String url = "file:///android_asset/help/index.html" ; 
        wv.loadUrl(url) ;
    }

    public void onBackPressed() {
       if (wv.canGoBack()) {
           wv.goBack() ;
       }
       else {
           super.onBackPressed() ;
       }
    }

    WebViewClient wvClient = new WebViewClient() {

       @Override
       public void onPageFinished(WebView mywv, String url) {

            // set web page title to the R.id.help_title widget

        String title = mywv.getTitle() ;
            if (title != null) {
                txtvTitle.setText( title) ;  
            }
            else txtvTitle.setText("untitled") ; 
       }      
    }
}
  

С помощью help_layout.xml с

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView 
    android:id="@ id/help_title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
        />
    <WebView 
    android:id="@ id/help_webview"
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:layout_weight="1"
        />
</LinearLayout>