WebView características básicas de uso e afins

WebView é um conteúdo web componente visor pode ser visualizado algum conteúdo on-line na rede e pode ser usado como o conteúdo da rolagem do navegador Web, que utiliza o WebKit como um motor de renderização de páginas web de exibição, que incluem zoom, executar uma pesquisa de texto, etc. antes e depois método de navegação.

Nota : Se você deseja exibir o conteúdo de páginas da web on-line no WebView, você precisa adicionar uma permissão de rede no arquivo AndroidManifest.xml, consulte o seguinte:

<uses-permission android:name="android.permission.INTERNET" />

uso Básico

WebView não está habilitado por padrão JavaScript, páginas de erro também será ignorado, mesmo que apenas para mostrar um pouco de HTML na interface do usuário, isso será muito bom, antes de o usuário interage com o usuário não precisa ler a página não precisa interagir com o usuário, se você precisa de um navegador completo, você precisa chamar o Intenção apropriada para iniciar o navegador para executar determinadas ações, ao invés de usar WebView para exibir, chamar o navegador do sistema para usar o seguinte código:

Uri uri = Uri.parse("https://www.example.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
 

WebView usado principalmente de duas maneiras, como na Atividade onCreate () método usado para criar ou diretamente incorporado no arquivo de layout, consulte o seguinte:

1. Crie um WebView diretamente do seu código

WebView webview = new WebView(this);
//这里将整个 Activity 窗口作为 WebView 的显示界面,也可单独放在某个布局中
setContentView(webview);


2. Use WebView no arquivo de layout

<WebView
    android:id="@+id/webView"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</WebView>

Então, como vamos carregar uma página, se a página é local e como colocá-lo, e como carregar um fragmento de HTML que, método de carregamento comumente usado para dois principais, como segue:

1. Coloque uma página inteira

Aqui testados usando Baidu Casa, CSDN Casa, teste Início Tencent, teste home page Baidu, você precisa definir o seguinte conteúdo propriedades página a ser exibida corretamente, se não definição aparece em preto e branco:

webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.loadUrl("https://www.baidu.com");

CSDN teste em casa, você será solicitado para abrir o aplicativo com um navegador para abrir a página, defina as seguintes propriedades para carregar o conteúdo da página diretamente:

webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://blog.csdn.net");

o conteúdo Início podem ser carregados diretamente testar Tencent Home:

webView.loadUrl("http://www.qq.com");

ambiente de teste pode ser diferente, o resultado não é o mesmo.

2. Coloque um arquivo HTML local

Onde aplicar para o acesso ao Manifest.permission.WRITE_EXTERNAL_STORAGE cartão SD quando o arquivo de carregamento HTML no cartão SD, consulte o seguinte:

//加载 assets 目录下的 HTML 文件
webView.loadUrl("file:///android_asset/mine.html");
//加载 SD 卡上的 HTML 文件
webView.loadUrl("file:///"+Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator+"mine.html");

3. Coloque HTML trecho

Ao carregar HTML fragmento, para definir o conjunto de caracteres, caso contrário ele vai ser ilegível, consulte o seguinte:

//加载 HTML 片段,设置字符集防止乱码出现
webView.loadData(Util.getHtmlData(),"text/html; charset=UTF-8",null);

WebView e configuração de processamento, principalmente nas seguintes áreas de interface:

  1. Criar e conjunto WebChromeClient, principalmente WebView secundário para lidar com caixas de JavaScript diálogo, título web site, o progresso do carregamento e assim por diante;
  2. Criar e conjunto WebViewClient, principalmente para fornecer uma variedade de eventos, tais como retorno de chamada;
  3. objetos WebSetting podem ser fornecidas por uma variedade de atributos relacionados WebView, como suporte JavaScript, WebView conjunto cache, tamanho da fonte, e similares;
  4. Java e JS chamar um ao outro, tal como a utilização addJavascriptInterface WebView (Object, String) Método de objetos Java injectado. Este método permite injetar objetos Java para JavaScript no contexto da página, para que você possa acessá-los através das páginas JavaScript.

escalada

suportes Android chamar o método a seguir para permitir que o built-in zoom depois de 1,5:

WebSettings.setBuiltInZoomControls(boolean)

Nota : A definição de um wrap_content built-in zoom, largura e altura da WebView é, vai levar a um comportamento indefinido, ele deve ser evitado durante o uso.

Construir páginas da Web para suportar diferentes densidades de tela

densidade de tela é baseado em resolução de tela, pixels da tela de baixa densidade por polegada menos disponíveis, telas de alta densidade disponíveis mais pixels por polegada, a densidade da tela é mais importante, porque outros fatores sendo o mesmo, com base na definição de pixels elementos de interface exibida num ecrã de grande densidade-baixa, pequena de visualização no ecrã de densidade mais elevada da tela; tela Android por conveniência, em termos de densidade real de mais extensa densidade tela: alta, média e baixa.

Por defeito, o WebView dimensionado página da web para a aparência padrão o tamanho do ecrã e a densidade do jogo desenhada, de modo que a tela é adequada para alta densidade escala de 1,5 vezes (de pixel menor) no ecrã é adequado para baixa densidade 0,75 vezes zoom (pixels maiores); a partir de Android 2.0 suporte WebView para DOM, CSS e metatags para ajudar os desenvolvedores da web para se adaptar a tela de destino com base em diferentes densidades de tela.

Aqui estão algumas instruções para lidar com diferentes densidades de tela:

  1. Window.devicePixelRatio usando atributo padrão especifica o factor de escalonamento de corrente do dispositivo, também se refere aos pixels individuais no dispositivo pixels físicos e dispositivos (independentes de dispositivo pixels (imersões)) relação, se window.devicePixelRatio é 1, então o dispositivo é considerado como sendo densidade (mdpi) aparelho, eo padrão não se aplica escalar página se o valor window.devicePixelRatio 1,5 vezes, em seguida, o dispositivo é considerado um dispositivo de alta densidade (hdpi), dimensionado para 1,5 vezes o conteúdo da página, se window.devicePixelRatio 0,75, em seguida, o dispositivo é considerado como sendo dispositivo de baixa densidade (ldpi), o conteúdo é dimensionada para 0,75 vezes a original, formulada como se segue:

window.devicePixelRatio(dpr) = physical pixel / dips(css pixel)}

physical pixel = dips *  density / 160} (Android)
  1. Utilização tela -webkit-dispositivo-pixel relação meios CSS consulta para especificar densidade de folha de estilo, que deve ser valor de 0,75, 1, 1,5, respectivamente, o que indica uma folha de estilo é aplicado a uma baixa densidade, média densidade, o dispositivo de ecrã de alta densidade , como a seguinte afirmação aplica-se apenas para mostrar a relação da densidade de pixels da tela hdpi.css de 1,5 para o ecrã do dispositivo, o que é adequado para o dispositivo de ecrã de alta densidade.
 <link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio:1.5)" href="hdpi.css" />

suporte de vídeo HTML5

Se suporte de vídeo HTML em seu aplicativo, você precisa habilitar a aceleração de hardware.

Sobre a aceleração de hardware, consulte: aceleração de hardware Android

suporte de tela cheia

A fim de apoiar de tela cheia, como vídeo ou outro conteúdo HTML, você precisa definir um WebChromeClient e implementar dois métodos onShowCustomView (View, WebChromeClient.CustomViewCallback) e onHideCustomView ():

1. onShowCustomView

Informar o aplicativo da página atual para entrar no modo de tela cheia, o aplicativo no modo de tela cheia inclui conteúdo da Web, vídeos e outros conteúdos em HTML.

/**
 * @param view 显示的View.
 * @param callback 调用当前页退出当前页
 * full screen mode.
 */
public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {};

2. onHideCustomView

Informar a aplicação do modo atual de tela inteira página de saída, o aplicativo deve esconder o costume de View.

public void onHideCustomView() {}

Se qualquer um destes métodos não for atingido, então a página Web correspondente à página não pode entrar em ecrã completo modo pode ser conseguida getVideoLoadingProgressView (definido a partir de uma vista do buffer de vídeo a ser exibida).

 public View getVideoLoadingProgressView() {
        return null;
}

HTML5 Geolocation API

Para Android N eo nível API> dispositivos M, HTTPS local suportado pela API única maneira, se aplicado em uma chamada de método maneira não-HTTPS pedido de localização API onGeolocationPermissionsShowPrompt (String, GeolocationPermissions.Callback) serão rejeitadas.

tamanho do layout

WebView altura recomendada é definido para um valor fixo ou não é recomendado wrap_content match_parent, se o WebView altura usa MATCH_PARENT, sua wrap_content pai altamente resultado de layout prático na escadaria tamanho inconsistente.

A altura do WebView está definido para o comportamento wrap_content aparecerá como segue:

  1. altura HTML deverá tornar-se um valor fixo, o que significa que em relação ao tamanho da altura do elemento de corpo em HTML pode ser incorrecto;
  2. Para aplicações onde o dispositivo é Android 4.4 e anteriores SDK, meta tags será ignorado, a fim de garantir a retrocompatibilidade;

Ele não suporta o uso de largura de layout wrap_content. Se tal largura, WebView tentará usar a largura do seu traçado pai.

Coletar dados sobre erros

Se o usuário concorda, alguns WebView dados de diagnóstico vai anonimamente enviados para o Google, estes dados irão ajudar a Google a melhorar WebView, cada aplicação WebView inicializado irá recolher estes dados, se você quiser desativar o recurso na lista de documentos necessários nas seguintes configurações:

 <meta-data 
    android:name="android.webkit.WebView.MetricsOptOut"
    android:value="true" />

links de referência: site oficial WebView

Se você acha que eles têm a ajuda, você pode se concentrar o número público: jzman-Blog , com a troca de aprendizagem.

Acho que você gosta

Origin www.cnblogs.com/jzmanu/p/12585309.html
Recomendado
Clasificación