Si estamos trabajando desde un Fragment y con un listView hay que agregar
Hay que agregar
WebView clog = new WebView(getActivity());
switch (position){
case 0: //créditos
clog.getFullLogDialog(1).show();
break;
case 1: //porque usar totti app
clog.getFullLogDialog(2).show();
break;
}
Código del tutorial, trabajando desde un Activity
MyActivity.java
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
public class MyActivity extends ActionBarActivity {
WebView clog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
clog = new WebView(MyActivity.this);
Button btnCon = (Button) findViewById(R.id.btnContenido);
btnCon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
metodo1();
}
});
Button btnOtro = (Button) findViewById(R.id.btnOtroContenido);
btnOtro.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
metodo2();
}
});
}
public void metodo1(){
clog.getFullLogDialog(1).show();
}
public void metodo2(){
clog.getFullLogDialog(2).show();
}
}
WebView.java
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.ContextThemeWrapper;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
/**
* Created by user on 24/09/2014.
*/
public class WebView {
private final Context context;
private int txt;
public WebView(Context context) {
this.context = context;
}
public AlertDialog getFullLogDialog(int txt2) {
txt = txt2;
android.webkit.WebView wv = new android.webkit.WebView(this.context);
wv.setBackgroundColor(Color.BLACK);
wv.loadDataWithBaseURL(null, this.getLog(), "text/html", "UTF-8",
null);
AlertDialog.Builder builder = new AlertDialog.Builder(
new ContextThemeWrapper(
this.context, android.R.style.Theme_Dialog));
builder
//.setTitle(context.getResources().getString(R.string.changelog_full_title))
.setView(wv)
.setCancelable(false)
// OK button
.setPositiveButton(
//context.getResources().getString(R.string.changelog_ok_button),
context.getResources().getString(android.R.string.ok),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
}
});
return builder.create();
}
/** modes for HTML-Lists (bullet, numbered) */
private enum Listmode {
NONE, ORDERED, UNORDERED,
};
private Listmode listMode = Listmode.NONE;
private StringBuffer sb = null;
private String getLog() {
// read changelog.txt file
sb = new StringBuffer();
try {
InputStream ins;
switch (txt) {
case 1: //contenido
ins = context.getResources().openRawResource(
R.raw.contenido);
break;
case 2: //otrocontenido
ins = context.getResources().openRawResource(
R.raw.otrocontenido);
break;
default:
ins = context.getResources().openRawResource(
R.raw.contenido);
}
BufferedReader br = new BufferedReader(new InputStreamReader(ins));
String line = null;
boolean advanceToEOVS = false; // if true: ignore further version
// sections
while ((line = br.readLine()) != null) {
line = line.trim();
char marker = line.length() > 0 ? line.charAt(0) : 0;
if (marker == '$') {
// begin of a version section
this.closeList();
String version = line.substring(1).trim();
// stop output?
} else if (!advanceToEOVS) {
switch (marker) {
case '%':
// line contains version title
this.closeList();
sb.append("<div class='title'>"
+ line.substring(1).trim() + "</div>\n");
break;
case '_':
// line contains version title
this.closeList();
sb.append("<div class='subtitle'>"
+ line.substring(1).trim() + "</div>\n");
break;
case '!':
// line contains free text
this.closeList();
sb.append("<div class='freetext'>"
+ line.substring(1).trim() + "</div>\n");
break;
case '?':
this.closeList();
sb.append("<div class='freetexttitle'>"
+ line.substring(1).trim() + "</div>\n");
break;
case '#':
// line contains numbered list item
this.openList(Listmode.ORDERED);
sb.append("<li>" + line.substring(1).trim() + "</li>\n");
break;
case '*':
// line contains bullet list item
this.openList(Listmode.UNORDERED);
sb.append("<li>" + line.substring(1).trim() + "</li>\n");
break;
default:
// no special character: just use line as is
this.closeList();
sb.append(line + "\n");
}
}
}
this.closeList();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
private void openList(Listmode listMode) {
if (this.listMode != listMode) {
closeList();
if (listMode == Listmode.ORDERED) {
sb.append("<div class='list'><ol>\n");
} else if (listMode == Listmode.UNORDERED) {
sb.append("<div class='list'><ul>\n");
}
this.listMode = listMode;
}
}
private void closeList() {
if (this.listMode == Listmode.ORDERED) {
sb.append("</ol></div>\n");
} else if (this.listMode == Listmode.UNORDERED) {
sb.append("</ul></div>\n");
}
this.listMode = Listmode.NONE;
}
}
contenido.txt (carpeta raw)
<html>
<head>
<style type='text/css'>
a { color:#a0a0e0 }
div.title {
color:#C0F0C0;
font-size:1.2em;
font-weight:bold;
margin-top:1em;
margin-bottom:0.5em;
text-align:center }
div.subtitle {
color:#C0F0C0;
font-size:0.8em;
margin-bottom:1em;
text-align:center }
div.freetext { color:#F0F0F0 }
div.list { color:#C0C0F0 }
</style>
</head>
<body>
$
% Quiero agradecer:
* <b>Gabriel Salcedo</b> por la espectacular interfaz
* Maria Ines Lund por el incentivo
$ END_OF_CHANGE_LOG
</body>
</html>
otrocontenido.txt (carepta raw)
<html>
<head>
<style type='text/css'>
a { color:#a0a0e0 }
div.title {
color:#C0F0C0;
font-size:1.2em;
font-weight:bold;
margin-top:1em;
margin-bottom:0.5em;
text-align:center }
div.subtitle {
color:#C0F0C0;
font-size:0.8em;
margin-bottom:1em;
text-align:center }
div.freetext { color:#F0F0F0 }
div.freetexttitle{
color:#C0F0C0;
font-size:1.2em;
font-weight:bold;
margin-top:1em;
margin-bottom:0.5em;
}
div.list { color:#C0C0F0 }
</style>
</head>
<body>
$
% Version 0.1
_ Septiembre/2014
* Primera versión, probando demandas de los usuarios y respuesta del servidor
$ END_OF_CHANGE_LOG
</body>
</html>
Explicación de símbolos
$ Comienza la sección % Comienza una línea de un título de la sección versión. _ Comienza una línea de una sección de la versión de los subtítulos. ! comienza una línea de texto libre. # Comienza una línea dentro de una lista numerada. * Comienza una línea dentro de una lista de viñetas ? Comienza una línea alienación izquierda
Fuente: https://code.google.com/p/android-change-log/
De acá es la fuente, solo que lo he modificado bajo a mis necesidades.
Iconos http://romannurik.github.io/AndroidAssetStudio/icons-launcher.html
Amigo, el codigo fueente no lo subiste ?
ResponderEliminarSi, no se te debe haber cargado bien la página, pero es lo que esta arriba.
EliminarEl contenido de los cuadro grise,
El proyeto de github, en esta oportundad no lo he subido porque no me parecia gran cosa, pero si ves el tuto, seguro que te vas a guiar como inplementarlo.
Tenes razón no lo he subido, ahora lo voy a subir.
EliminarGracias por comentar.
Amigo, me podrias explicar como añadir esto a las preferencias, gracias.
ResponderEliminarMuy útil Ramiro. ¿Y habría alguna manera de mostrar el texto justificado en un webView?
ResponderEliminarSupongo que en un html y con la etiqueta style se podría definir un text-align:justify ¿Pero como lo asocio si quiero trabajar con un textView o un ediText para que tengan también un texto justificado?
para css es como vos decis text-align:justify pero para el textview es distinto te recomiendo ver esto -> http://stackoverflow.com/questions/1292575/android-textview-justify-text
EliminarOk gracias.
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarGracias Ramiro por este post, pero necesito ayuda, estoy bloqueado haber quiero que con este codigo que te pongo, lo puedas incluir a las preferences.xml (Es decir como lo tiene usted en la parte de arriba pero con las preferences)
ResponderEliminarMi Codigo es este:
findPreference("ChangeLog").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
WebView webView = new WebView(getApplicationContext());
webView.loadUrl("file:///android_asset/html/licenses.html"); //Sin HTML x con el .txt
AlertDialog dialog = new AlertDialog.Builder(Setting.this).create();
dialog.setTitle(R.string.open_source_changelog);
dialog.setView(webView);
dialog.setButton(getResources().getString(R.string.close), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
dialog.show();
return true;
}
});
Este es el codigo, que te acabo de añadir es el que quiero que me ayudes, a ver si podemos meterlo dentro de las preferences y asin ayudamos a mas gente a y perdona por contestar a esta hora.
Hola Ramiro, me encantan tus tutos, gracias por tu trabajo, ¿como puedo meter un WebView en una pestaña de un ActionBar Tabs?
ResponderEliminarHola Ramiro muchas gracias por los tutos etan muy buenos.
ResponderEliminartengo una duda, como hago para que mi aplicacion busque si hay nuevas actualizaciones en Playstore?
Hola Ramiro, tengo un problema con "clog.getFullLogDialog(1).show();" me da el siguiente error: Cannot resolve method 'getFullLogDialog(int)' haciendo un copy & paste de todo tu código. Gracias por cualquier ayuda.
ResponderEliminares el WebView, no te ha tomado de la clase que has agregado sino la que trae androidStudio, borra y el WebView que tiene en los import y vuelvelo a agregar
EliminarMe aperece el mismo error, el unico Webview de Android es webkit.WebView; y no carga esa funcion.
Eliminara la clase WebView cambiale el nombre por WebViewCustoms para no tener problemas
Eliminarpublic class about1 extends Activity {
ResponderEliminar@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.about);
ImageButton f = (ImageButton) findViewById(R.id.imbtn_back);
f.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
// System.exit(0);
}
});
ListView lista = (ListView) findViewById(R.id.listView1);
ArrayList arraydatos = new ArrayList();
Datos datos;
//Introducir los datos
datos = new Datos(getResources().getDrawable(R.mipmap.ic_action_mail), "Contactenos", ".....@outlook.com");
arraydatos.add(datos);
datos = new Datos(getResources().getDrawable(R.mipmap.ic_action_edit), "Titulo 2", "Informacion 2");
arraydatos.add(datos);
//Creo el adapter personalizado
AdapterDatos adapter = new AdapterDatos(this, arraydatos);
//Lo aplicamos
lista.setAdapter(adapter);
}
}
ese es mi código como podría hacer q cada item del listview me envié a un webview como el ejemplo de arriba y también q abra un link a aun aplicación externa algo similar a su app tottiapp.
hola me gustaria saber si me puedes esplicar de como insertar una pantalla de ustream para ver video en vivo de un canal y que no me aparescan los controles del video
ResponderEliminaren un proyecto de android estudio
ResponderEliminargracias