SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
-
SLV
- Сообщения: 10
- Зарегистрирован: 13 авг 2012, 15:17
Сообщение
SLV » 11 сен 2012, 19:56
В webview надо вывести html файл из assets, но при этом изменить в нем файл стилей (css) в зависимости от параметров в SharedPreferences. Файл стилей тоже из assets.
Вот фрагмент кода для считывания параметров. Передавать значение параметра (имя файла css) в html файл пытаюсь с помощь
JavascriptInterface, но никак не могу разобраться, как этот интерфейс правильно создать и добиться работающего результата. Помогите разобраться, пожалуйста с примером и по подробней.
Код: Выделить всё
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
PreferenceManager.setDefaultValues(this, R.xml.pref, false);
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(getApplicationContext());
colorPref = prefs.getString("colorListPref", "orange");
// Set CSS files on сreate
if (colorPref.equals("orange"))
myStyle = "orange.css";
else if (colorPref.equals("blue"))
myStyle = "blue.css";
else if (colorPref.equals("green"))
myStyle = "green.css";
html_view = (WebView) findViewById(R.id.WebView01);
WebSettings webSettings = html_view.getSettings();
webSettings.setBuiltInZoomControls(true);
webSettings.setUseWideViewPort(true);
webSettings.setJavaScriptEnabled(true);
-
SLV
- Сообщения: 10
- Зарегистрирован: 13 авг 2012, 15:17
Сообщение
SLV » 03 окт 2012, 16:32
С заменой файла стиля решили сделать так:
Код: Выделить всё
html_view.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url){
html_view.loadUrl("javascript: "+
"var cssNode = document.createElement('link');" +
"cssNode.type = 'text/css';" +
"cssNode.rel = 'stylesheet';" +
"cssNode.href = '"+ myStyle +"';"+
"cssNode.media = 'screen';" +
"document.getElementsByTagName('head')[0].appendChild(cssNode);");
}
});
html_view.loadUrl(value);
Работает, но т.к. стиль подставляется после вывода WebView изменения стиля приводят к "визуальным эфектам" - изменение цвета, фона, и.т.п.
Теперь вопрос:
Как сделать задержку вывода WebView на экран, чтобы страница выводилась сразу с номым стилем.
-
AndreyI
- Сообщения: 372
- Зарегистрирован: 14 май 2012, 16:18
Сообщение
AndreyI » 03 окт 2012, 16:45
Попробуйте переопределить метод onPageStarted
-
SLV
- Сообщения: 10
- Зарегистрирован: 13 авг 2012, 15:17
Сообщение
SLV » 03 окт 2012, 18:59
Если подгружать стиль в методе onPageStarted - он не грузится. Наверное еще нет документа.
Пробовал играться с видимостью - сначала
Код: Выделить всё
html_view.loadUrl(value);
html_view.setVisibility(View.INVISIBLE);
а в onPageFinished
все равно текст "мигает" при подстановке стиля
Может можно как-то сделать задержку перед VISIBLE?