Подгрузка css из кода при загрузке страницы webview

Программа написана на java и с изменением темы по кнопке проблем нет, однако другая часть приложения в webview. Нужно, чтобы если в SharedPrefs ключ theme установлен на 1, то грузить light.css и т.д


Ответы (1 шт):

Автор решения: Andrew

Для сохранения данных в SharedPreferences будем записывать данные таким образом:

SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
editor.putInt("id", 1);
editor.apply();

чтобы считать данные делаем так:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int my_id= sharedPref.getInt("id", defaultValue);

Для того чтобы добавлять тему в страницу при загрузке, добавляем код css и грузим страницу:

webView=(WebView) findViewById(R.id.webView1);

webView.getSettings().setJavaScriptEnabled(true);
StringBuilder sb = new StringBuilder();
sb.append("<HTML><HEAD><LINK href=\"http://test.com/css/test.css\" type=\"text/css\" rel=\"stylesheet\"/></HEAD><body>");
sb.append(attributes.toString());
sb.append("</body></HTML>");
webView.loadDataWithBaseURL(null, sb.toString(), "text/html", "utf-8", null);

Второй вариант - предварительно загружаем содержимое сайта:

doc = Jsoup.connect("http://....").get();

убираем css который пришел:

doc.head().getElementsByTag("link").remove();

ставим css который нам нужен:

doc.head().appendElement("link").attr("rel", "stylesheet").attr("type", "text/css").attr("href", "style.css");

выгружаем получившийся html:

String htmldata = doc.outerHtml();

загружаем его в webview:

WebView webview = new WebView(this);
setContentView(webview);
webview.loadDataWithBaseURL("file:///android_asset/.", htmlData, "text/html", "UTF-8", null);
→ Ссылка