Страница 1 из 1

Замена в webview файла стиля CSS из assets

Добавлено: 11 сен 2012, 19:56
SLV
В 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);


Как сделать задержку вывода webview при замене файла стиля

Добавлено: 03 окт 2012, 16:32
SLV
С заменой файла стиля решили сделать так:

Код: Выделить всё

 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 на экран, чтобы страница выводилась сразу с номым стилем.

Re: Замена в webview файла стиля CSS из assets

Добавлено: 03 окт 2012, 16:45
AndreyI
Попробуйте переопределить метод onPageStarted

Re: Замена в webview файла стиля CSS из assets

Добавлено: 03 окт 2012, 18:59
SLV
Если подгружать стиль в методе onPageStarted - он не грузится. Наверное еще нет документа.

Пробовал играться с видимостью - сначала

Код: Выделить всё

html_view.loadUrl(value);
html_view.setVisibility(View.INVISIBLE);
а в onPageFinished

Код: Выделить всё

html_view.setVisibility(View.VISIBLE);
все равно текст "мигает" при подстановке стиля
Может можно как-то сделать задержку перед VISIBLE?