RockBearLTD
@RockBearLTD
Ленивый недопрограммист.

Несколько малосвязанных проблем с WebView, html-ресурсами и ListView?

Есть несколько проблем. Не обязательно читать все и отвечать на все сразу, подзаголовки к проблемам сделал, чтобы сразу было видно, с чем имеем дело. В общем, к делу. Есть две активности. На первой - список ListView, на второй WebView, подгружающий html файлы из raw-ресурсов проекта. Веб-элемент работает под таким простым кодом:

WebView webView;
    webView = (WebView) findViewById(R.id.webView);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setSupportZoom(true);
    String text = readRawTextFile(context, getResources().getIdentifier(resName, "raw", "mypackagename"));

        webView.loadDataWithBaseURL("file:///android_asset/", text, "html", "utf-8", null);


Проблема 1. Обработка нажатия кнопки Back в webView.
В каждом html ресурсе под заголовком есть картинка-ссылка обусловленным размером, ссылается на полный размер самой картинки. Код в html прост, как банный лист:

<a href="file:///android_asset/pic1.jpg"><img src="file:///android_asset/pic1.jpg" height="300dp"></a>


При выходе из полноразмерной картинки я попадаю на свой список, а не обратно в html файл. Было понятно, что кнопка "BACK" воспринимается layout'ом, а не webView. Почитав документацию от гугла, нашел такой способ:

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    // Check if the key event was the Back button and if there's history
    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
        myWebView.goBack();
        return true;
    }
    // If it wasn't the Back key or there's no web page history, bubble up to the default
    // system behavior (probably exit the activity)
    return super.onKeyDown(keyCode, event);
    }


Вроде бы, простейший код, должен работать. Но при проверке оказалось, что возвращаясь из полной картинки, html файл не подгружается обратно, и я попадаю на пустой белый экран, из которого я выхожу уже обратно в список. Быть может, это связано с тем, что у меня много html-файлов, которые в зависимости от условий загружает нужный. Но тут я уже лишь предполагаю, и я в тупике. Что думаете на этот счет вы?

Тут же есть еще небольшой маленький каприз. Какой единицой измерения (или html тегами) можно сделать так, чтобы картинка на всех экранах выглядела одинаково? На смартфоне - хорошо, на планшете выглядит слишком маленькой.

Проблема 2. Старая версия android и html background.
Проверяя проект на старом телефоне с версией android 2.2, появилась другая проблема. ListView закрашивался системным цветом там, где был текст, перекрывая мой задний фон. А также он косячил (точнее, я косячил, наверняка) в webView. В html файле я таким способом сделал задний фон:

<body background="file:///android_res/drawable/background_html.jpg" bgproperties="fixed"></body>


Картинка заднего фона я сделал (к примеру) в размере 25*25, и три раза вставил ее в картинку 50*50, отражая концы так, чтобы при дублировании картинки не было никаких несостыковок.

На **android 2.2** картинка заднего фона не дублировалась, а крепилась под верхушкой файла, а при скроллировании контента - картинка заднего фона уходила вместе с заголовком, оставлять на задник лишь белый фон. Тут у меня нет даже предположений. Что можете сказать? Поможет установка заднего фона к webView через java код?

Проблема 3. WebView и ссылка одного html файла на другой.
Самая неприятная. У меня есть также в некоторых html файлах ссылки на другие файлы, если есть какое-то упоминание (по принципу википедии). Открываем, к примеру, file2.html Ссылка тоже оформлена простым html тегом:

<a href="file:///android_res/raw/file4.html">Ссылка на другой html-файл из ресурсов</a>


На моем телефоне с версией 4.2.2 - все подгружается как надо, также, как подгрузилось бы, зайдя я через список.
На планшете с версией 4.4.2 и на телефоне друга с версией 5.1 при переходе по ссылке загружается не html-файл в webView, а просто показывает мой контент с моим кодом этого самого html-файла, то есть открывает его так, как если бы я открыл html-файл через блокнот. При переходе в этот файл через список - все хорошо и правильно. Он должен воспринимать его как html страницу и выстраивать в положенном порядке. Почему-то происходит сбой в сценарии когда идёт повторная ссылка. Что думаете по этому поводу?

P.S.: Заранее благодарю всех, кто ответит хотя бы натолкнет на нужную мысль или ответит хотя бы на один вопрос. Умойте меня моей неопытностью, пожалуйста. Буду благодарен.
  • Вопрос задан
  • 1446 просмотров
Пригласить эксперта
Ответы на вопрос 2
@onepavel
Консультация и разработка мобильных приложений
Ответ написан
Комментировать
@Atllantis
По первому пункту:
В активити перехватывай нажатия на кнопку "BACK" и делай то что нужно.
@Override
public void onBackPressed() {
    // Тут делайте то, что нужно...
    // Если ничего не нужно, вызывайте суперкласс "super.onBackPressed();"
    //     или просто закрывайте активность "finish();"
}


Единица измерения DP, а для текста SP.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы