DevCorner: utilizziamo le webview

Giuseppe Tripodi
Giuseppe Tripodi Tech Master
DevCorner: utilizziamo le webview

Nonostante il pranzo di Pasqua e le abbuffate di pasquetta, tra un pezzo di cioccolata e un bicchiere di vino siamo riusciti a tirare fuori anche la puntata settimanale del DevCorner. Ma, proprio alla luce delle difficoltà digestive che siamo sicuri anche voi starete affrontando, abbiamo preferito mantenerci su un qualcosa di leggero (almeno qui!). In questo semplice tutorial, quindi, vediamo come utilizzare le webview.

Come probabilmente saprete, parlando di WebView intendiamo un vero e proprio browser capace di funzionare all'interno della nostra applicazione: in generale, infatti, non sempre è una buona idea fare in modo che l'utente si "allontani" dalla nostra app per perdersi nei meandri del world wide web: se dobbiamo mostrargli una semplice pagina web, ad esempio, può avere senso farlo all'interno di una webview.

All'interno delle stesse, infatti, è possibile caricare un intero sito passandogli l'URL o, se preferiamo, mostrare la pagina partendo dal codice HTML: vediamo in pochi passi quanto è facile fare fare entrambe le cose.

Per prima cosa creiamo due Activity, la prima sarà la nostra Main che conterrà due bottoni mentre la seconda avrà solo una WebView a tutto schermo. Il loro aspetto dovrebbe essere qualcosa di simile:

activity_main.xml:



    

    



activity_web_view.xml



    


Apriamo quindi il codice della Main e, dopo aver definito i bottoni e assegnato loro l'OnClickListener, specifichiamo all'interno di quest'ultimo il comportamento dei due tasti. In particolare, nel caso venga premuto il primo, vogliamo che nella seconda activity venga mostrato AndroidWorld: gli passeremo quindi direttamente l'URL del nostro portale; cliccando l'altro tasto, invece, passeremo tramite il solito putExtra del codice HTML da visualizzare.

public class MainActivity extends ActionBarActivity implements OnClickListener{

	ImageButton awButton;
	ImageButton customButton;
	Context ctx;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		awButton = (ImageButton) findViewById(R.id.aw);
		customButton = (ImageButton) findViewById(R.id.dc);
		awButton.setOnClickListener(this);
		customButton.setOnClickListener(this);
		ctx = this;
		
	}

	@Override
	public void onClick(View v) {
		Intent webIntent = new Intent(ctx,WebViewActivity.class);
		if(v.getId()==awButton.getId())
		{
			webIntent.putExtra("sito", "https://www.androidworld.it");
		}else if(v.getId()==customButton.getId())
		{
			webIntent.putExtra("customHtml", "

Ciao mondo, sono una scritta random!

"); } startActivity(webIntent); };

A questo punto, non ci rimane che gestire cosa caricare nella seconda activity: analizziamo quindi cosa c'è all'interno del Bundle extra e, nel caso si trovi l'elemento che abbiamo nominato come sito utilizziamo il metodo loadUrl, non dimenticandoci di attivare prima il JavaScript; in caso contrario, cercheremo il nostro customHtml e lo caricheremo nella view attraverso loadData, specificando che si tratta di HTML e quale codifica utilizzare per i caratteri.

WebView webView;
	Bundle extra;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_web_view);

		webView = (WebView) findViewById(R.id.webView1);
		extra = getIntent().getExtras();
		if (null != extra.getString("sito")) {
			webView.getSettings().setJavaScriptEnabled(true);
			webView.loadUrl(extra.getString("sito"));

		} else if (null != extra.getString("customHtml")) {
			String customHtml = extra.getString("customHtml");
			webView.loadData(customHtml, "text/html", "UTF-8");
		}

Ovviamente, prima di concludere l'opera è necessario dichiarare nel Manifest che utilizziamo i permessi per accedere a Internet:

    

Anche per questo martedì è tutto: come sempre, per leggere l'intero codice sorgente o per eventuali dubbi vi rimandiamo alla sezione Sviluppo del nostro forum.