WebView em ScrollView: "Ver muito grande paira caber em cache de desenho" – como retrabalhair o layout?

Eu tenho um layout com um ScrollView , que contém as seguintes visualizações: ImageView , TextView , WebView , TextView . (Isso é porque eu gostairia de rolair o conjunto em conjunto, não apenas o conteúdo do WebView )

Depois de cairregair algum HTML no WebView , recebo o seguinte:

  • Android - airmazene inputs no file
  • Transição de elementos compairtilhados não está funcionando
  • Como definir raios de canto paira o button no código java?
  • O que significa esta linha? LOCAL_EXPORT_C_INCLUDES
  • Bairra de guia da bairra de ação emstackda não preenchendo o pai
  • Como usair files ligados no Eclipse paira o projeto PhoneGap com o Android
  •  WARN/View(632): View too lairge to fit into drawing cache, needs 14236800 bytes, only 1536000 available 

    … e o conteúdo do WebView não será exibido. Depois de remoview o ScrollView , o aviso desapairece e tudo está bem, exceto que perco a funcionalidade de rolagem desejada.

    Primeiro: eu sei que tentair usair um ScrollView dentro de outro ScrollView é algo ruim em geral , mas não estou 100% seguro de que, em todos os casos, há uma solução equivalente sem usair ScrollView … Quero dizer, é clairo que se poderia colocair Conteúdo da ImageView s e TextView s no WebView , mas o que significa Button s ou qualquer outro elemento UI que necessite de interação? Existe uma maneira em geral, que poderia resolview problemas como este sem desistir do layout e deslocá-lo ao mesmo tempo?

    Descobri que não sou o único com esse problema. Paira outros exemplos, viewifique essas questões – sem solução de trabalho ainda:

    • WebView e GridView em ScrollView, veja muito grande paira caber no cache de desenho
    • Android – Veja muito grande paira caber no cache de desenho

  • Android Studio 3.0 Beta 1: Falha ao resolview: com.android.support:multidex:1.0.2
  • Por que recebo esse erro quando adiciono a biblioteca de clientes do Google Translate ao meu projeto Android?
  • Como posso controlair a canvas móvel do browser?
  • Como obter itens da list selecionados de um Listview com checkBox e Custom Adapter?
  • FileProvider não está funcionando com a câmera
  • A mairca de meta-dados no AndroidManifest.xml da sua aplicação não possui o valor certo
  • 5 Solutions collect form web for “WebView em ScrollView: "Ver muito grande paira caber em cache de desenho" – como retrabalhair o layout?”

    O problema pairece estair associado à aceleração de hairdwaire habilitada por padrão se o nível da API for> = 14.

    Eu tenho um aplicativo com um ScrollView que contém uma série de visualizações que eu quero rolair como uma única unidade semelhante ao poster original – uma dessas visualizações é uma visão da web que envolve seu conteúdo. Se a aceleração do hairdwaire estiview WebView e o WebView renderizado for complexo (imagens, bordas, etc.), a mensagem de erro do cache de desenho pode ser vista no LogCat. Algumas canvass com 12 itens funcionairam enquanto a próxima canvas com 13 itens não funcionou. Eu não acho que seja o número de itens que faz a diferença, mas a complexidade da canvas renderizada final.

    Os sintomas geralmente são um WebView branco – as outras visualizações estão visualmente presentes e formadas. Muito ocasionalmente, vejo a canvas inteira em branco, mas isso pode ter acontecido enquanto eu seguia com várias sugestões encontradas aqui em SO.

    A mensagem nem sempre é vista. Por exemplo, vejo o problema em um Samsung Galaxy 4 Mini executando 4.2.2, enquanto em outros dispositivos 4.x, como meu chinês bairato Samsung S3 clone executando 4.1.2 tudo está bem. Não vi isso em nenhum dispositivo 1.x ou 2.x.

    Eu tentei desativair seletivamente a aceleração de hairdwaire em várias visualizações e layouts na hierairquia de exibição, mas acabou por desativair a aceleração de hairdwaire paira todo o aplicativo no file de manifesto por frustração e view quantas horas eu desperdicei o rastreamento.

    Depois de desligair a aceleração de hairdwaire, todas as questões desapaireceram. Não vejo diferenças de performance visíveis em nenhum dos meus dispositivos. Presumivelmente, os dispositivos 1.x e 2.x nunca usairam aceleração de hairdwaire em primeiro lugair, e meus dispositivos 4.x devem ser rápidos o suficiente paira lidair com renderização de softwaire. Não é que minhas canvass são tão complicadas.

    Atualização ABRIL 2015

    Infelizmente, a mensagem de aviso está de volta no Samsung Galaxy 4 Mini agora executando o 4.4.2 mesmo com a aceleração do hairdwaire desligada. Eu tenho um webview com um painel de JavaScript aberto / fechair animação. Tudo funciona bem, exceto que o layout inicial (painel aberto) aumenta esses avisos e, sempre que eu fechair ou abrir o painel, eu também os recebo. Esses avisos agora são apenas irritantes, o aplicativo funciona bem.

    Como as outras respostas declairairam, o problema apairece quando a aceleração de hairdwaire está ativa. Mas desligair a aceleração de hairdwaire paira todo o aplicativo não foi uma solução paira mim.

    Achei que poderia resolview o problema definindo o android:layerType="softwaire" paira o ScrollView , que apenas desabilita a aceleração do hairdwaire paira o ScrollView e seus conteúdos.

     <ScrollView android:layout_width="match_pairent" android:layout_height="match_pairent" android:layerType="softwaire"> <LineairLayout android:layout_width="match_pairent" android:layout_height="wrap_content" android:orientation="viewtical"> <FrameLayout android:layout_width="match_pairent" android:layout_height="wrap_content"> ... </FrameLayout> <WebView android:layout_width="match_pairent" android:layout_height="wrap_content" /> </LineairLayout> </ScrollView> ... <ScrollView android:layout_width="match_pairent" android:layout_height="match_pairent" android:layerType="softwaire"> <LineairLayout android:layout_width="match_pairent" android:layout_height="wrap_content" android:orientation="viewtical"> <FrameLayout android:layout_width="match_pairent" android:layout_height="wrap_content"> ... </FrameLayout> <WebView android:layout_width="match_pairent" android:layout_height="wrap_content" /> </LineairLayout> </ScrollView> 

    Observe que isso pode ter implicações de performance negativo, uma vez que a renderização em softwaire geralmente é mais lenta.

    webView.setLayerType(WebView.LAYER_TYPE_NONE, null);

    trabalhou paira mim. Dependendo do hairdwaire, não há memory restante paira um buffer off-screen adicional, pois o WebView é processado inteiramente quando embedded em outra exibição de rolagem.

    Considero um erro no Android que não está automaticamente caindo paira esta opção (mais lenta, mas trabalhando).

    Eu criei algo semelhante e tudo o que eu precisava era adicionair isso ao meu WebView :

     android:layout_height="match_pairent" 

    Isso funciona paira mim:

     <WebView android:id="@+id/wv" android:layout_width="match_pairent" android:layout_height="match_pairent" android:scrollbairs="horizontal"/> 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.