Ответ 1
Получение простого текстового контента из веб-представления довольно сложно. В принципе, классы android не предлагают его, но javascript делает, и Android предлагает способ для javascript передать информацию обратно в ваш код.
Прежде чем перейти к деталям, обратите внимание, что если ваша структура html проста, вам может быть лучше просто разобрать данные вручную.
Итак, вот что вы делаете:
- Включить javascript
- Добавьте свой собственный класс интерфейса javascript, чтобы позволить javascript взаимодействовать с вашим кодом Android.
- Зарегистрируйте свой webviewClient, переопределив onPageFinished добавить немного javascript
- В javascript получите element.innerText тега и передайте его в ваш интерфейс javascript.
Чтобы уточнить, я напишу рабочий (но очень грубый) пример кода ниже. Он отображает веб-просмотр сверху и текстовое изображение с текстовым содержимым внизу.
package test.android.webview;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;
public class WebviewTest2Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WebView webView = (WebView) findViewById(R.id.webView);
TextView contentView = (TextView) findViewById(R.id.contentView);
/* An instance of this class will be registered as a JavaScript interface */
class MyJavaScriptInterface
{
private TextView contentView;
public MyJavaScriptInterface(TextView aContentView)
{
contentView = aContentView;
}
@SuppressWarnings("unused")
public void processContent(String aContent)
{
final String content = aContent;
contentView.post(new Runnable()
{
public void run()
{
contentView.setText(content);
}
});
}
}
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new MyJavaScriptInterface(contentView), "INTERFACE");
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url)
{
view.loadUrl("javascript:window.INTERFACE.processContent(document.getElementsByTagName('body')[0].innerText);");
}
});
webView.loadUrl("http://shinyhammer.blogspot.com");
}
}
Используя следующий файл main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_weight="0.5" />
<TextView
android:id="@+id/contentView"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_weight="0.5" />
</LinearLayout>