Как связать HTML-файлы в WebView? - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть огромная папка htm-файлов и один html-файл с href-ссылками на каждый из этих htm-файлов. Я хотел бы создать приложение для Android для личного пользования, чтобы упростить просмотр этих файлов на планшете.

Мне удалось загрузить основной html-файл в WebView в Android Studio, но нажатие на любой URL-адрес приводит к сбою, поэтому я не могу загрузить htm-файл через мой html-каталог.

Я не обладаю достаточным опытом в программировании Android, у меня есть только какой-то устаревший опыт создания веб-сайтов с тех времен, когда было достаточно html с некоторыми CSS, поэтому я стараюсь использовать свою интуицию. Я мог упустить что-то очень очевидное, но мне не удалось решить мою проблему.

Может быть, вы сможете мне помочь? Можно ли перенаправить между html-файлами через href в WebView? Или, может быть, есть простой способ обойти это? Кодирование каталога с нуля, к сожалению, не подлежит сомнению - существуют тысячи htm-файлов. Любые предложения приветствуются.

EDIT: Мой код выглядит следующим образом:

MainActivity.java

package a.my.app4;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;

import java.nio.channels.WritableByteChannel;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView webz=(WebView)findViewById(R.id.web1);
        webz.loadUrl("file:///android_asset/index.html");

    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <WebView
        android:id="@+id/web1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="0dp"    />
</RelativeLayout>

index.html - это просто огромный список ссылок href в разделе body. Он правильно загружается в WebView, даже простое форматирование из CSS-файлов корректно, но нажатие на ссылки приводит к сбою. Есть тысячи таких строк:

<a href="view-1.htm" title="file description">file title</a>

Я также пытался изменить его таким образом (что было бы проблематично с тысячами строк ...), но он тоже не работал:

<a href="file:///android_asset/view-1.htm" title="file description">file title</a>

Все файлы находятся в папке активов.

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Для тех, у кого будет такая же проблема в будущем, я решил ее, добавив одну строку в файл Java. Я действительно упускал что-то действительно очевидное. Я также добавил часть кода, чтобы определить поведение кнопки возврата.

MainActivity.java теперь выглядит следующим образом:

package a.my.app4;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;

import java.nio.channels.WritableByteChannel;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView webz=(WebView)findViewById(R.id.web1);
        webz.loadUrl("file:///android_asset/index.html");
        webz.setWebViewClient(new WebViewClient());

    }

    @Override
    public void onBackPressed() {
        WebView webz = (WebView) findViewById(R.id.web1);
        if (webz.canGoBack()) {
            webz.goBack();
        } else {
            super.onBackPressed();
        }
    }
}
0 голосов
/ 01 мая 2018

Вам нужно установить политику StrictMode, чтобы выставить URI (в вашем случае view-1.html). Вы можете достичь желаемого результата следующим образом:

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
    StrictMode.setVmPolicy(builder.build());
    WebView webView = findViewById(R.id.wvWebView);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl("file:///android_asset/index.html");
}

index.html

<html>
<body>
   <H1>Hello</H1>
   <a href="view1.html" title="file description">file title</a>
 </body>
</html>

view1.html

<html>
<body>
   <H1>Hello View 1</H1>
 </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...