Quero mudar a fonte padrão do webview para uma fonte personalizada. Estou usando o webview para desenvolver um aplicativo de navegador bilíngue para Android.
Tentei obter uma instância de fonte personalizada colocando minha fonte personalizada em recursos. Mas ainda não consegui definir a fonte padrão do webview para minha fonte.
Isso é o que eu tentei:
Typeface font = Typeface.createFromAsset(getAssets(), "myfont.ttf");
private WebView webview;
WebSettings webSettings = webView.getSettings();
webSettings.setFixedFontFamily(font);
Alguém pode corrigir isso ou sugerir qualquer outro método para alterar a fonte padrão do webview para uma fonte personalizada?
Obrigado!
android
webview
font-face
custom-font
Dhanika
fonte
fonte
Respostas:
Há um exemplo prático disso neste projeto . Tudo se resume a:
assets/fonts
pasta, coloque a fonte OTF ou TTF desejada (aqui MyFont.otf)Crie um arquivo HTML que você usará para o conteúdo do WebView, dentro da
assets
pasta (aqui dentroassets/demo/my_page.html
):Carregue o HTML no WebView a partir do código:
Observe que injetar o HTML por meio
loadData()
não é permitido. Conforme a documentação :Como @JaakL sugere no comentário abaixo, para carregar HTML de uma string, você deve fornecer o URL base apontando para seus ativos:
Ao fazer referência à fonte em
htmlData
, você pode simplesmente usar/fonts/MyFont.otf
(omitindo o URL base).fonte
res/font
pasta. Qual seria o caminho então? Eu tentei,file:///android_res/font/
mas não parece funcionar.Estou usando este código :
fonte
font-family: 'myface';
Ainda mais simples, você pode usar o formato de URL do ativo para fazer referência à fonte. Nenhuma programação necessária!
...
fonte
.ttf
e.html
no mesmo diretório e carregá-lo no navegador Android, ele funciona. No entanto, no WebView do meu aplicativo, enquanto o CSS é mostrado, o texto aparece na fonte padrão do Android, apesar de adicionar o.ttf
àassets/fonts
pasta do projeto . Estou testando no 2.3.5, mas construindo contra o 2.1. Pode ser esse o problema ou há algo que estou perdendo?view.loadUrl()
works, enquantoview.loadData()
não. Não tenho ideia de por que o último não o faz.Isso pode ser feito no Android. Levei três dias para resolver esse problema. Mas agora parece muito fácil. Siga estas etapas para definir a fonte personalizada para o Webview
1. Adicione sua fonte à pasta de ativos
2.Copie a fonte para o diretório de arquivos do aplicativo
3.Você deve chamar a função acima apenas uma vez (você deve encontrar alguma lógica para isso).
4. Use o código abaixo para definir o valor para sua visualização na web. Aqui estou usando CSS para definir a fonte.
5. Você pode chamar a função acima conforme abaixo
fonte
eu fiz isso pelas respostas superiores com estas adições:
e então usar
src: url("file:///android_asset/fonts/YourFont...
Obrigado a todos:)
fonte
Muitas das respostas acima funcionam perfeitamente se você tiver seu conteúdo na pasta de ativos.
No entanto, se quiser fazer o download e salvar todos os seus ativos de um servidor para o armazenamento interno, você pode usar
loadDataWithBaseURL
e usar uma referência para o armazenamento interno como baseUrl. Então, todos os arquivos serão relativos ao html carregado e serão encontrados e usados corretamente.No meu armazenamento interno, salvei os seguintes arquivos:
Então eu uso o seguinte código:
O arquivo CSS usado no html acima (style.css):
Eu só tentei fazer isso com o objetivo de minSdkVersion 19 (4.4), então não tenho ideia se funciona em outras versões
fonte
fonte
Você não precisa usar o arquivo ttf local para definir a fonte do webview para o Android. Isso aumentará o tamanho de todo o aplicativo.
você também pode usar fontes online como a fonte do google ... Isso ajudará a reduzir o tamanho do seu apk.
Por exemplo: visite o URL abaixo https://gist.github.com/karimnaaji/b6c9c9e819204113e9cabf290d580551#file-googlefonts-txt
Você encontrará as informações necessárias para usar esta fonte. em seguida, crie uma string como abaixo
então carregue o webview assim
feito. Você poderá carregar a fonte de uma fonte externa desta forma.
Agora, quanto à fonte do aplicativo, não faz sentido usar 1 fonte para o webview e uma fonte diferente para todo o aplicativo. Portanto, você pode usar fontes para download em seu aplicativo, que também usa fontes externas para carregar fontes no aplicativo.
fonte
Você pode fazer isso usando CSS. Fiz isso com um aplicativo, mas não funciona no Android 2.1, pois há um bug conhecido no navegador Android 2.1.
fonte
O problema é que ela precisa estar em uma pasta, tente colocar "./myfont.ttf" em vez disso, se não colocar a fonte dentro de uma pasta em recursos como "fonts / myfont.ttf" que funcionará com certeza.
fonte
teste, funcione para mim como um encanto:
fonte
Se você estiver colocando fontes
res/font
como eu, você pode alterar o diretório para o seguinte: -fonte
Use a biblioteca https://github.com/delight-im/Android-AdvancedWebView .
em dados html:
em xml:
em java:
fonte
É assim que você carrega htmlData em um webview:
onde
getHtmlData(activity,**htmlData**)
retorna uma string de código html.fonte