web-dev-qa-db-fra.com

Comment définir la taille du texte dans WebView dans android

J'utilise WebView pour justifier le texte. Je veux savoir-

  1. Est-il possible de définir la taille du texte dans le fichier layout? Comme je veux une taille de texte différente pour différentes tailles d'écran.

  2. Et aussi un problème est que le premier arrière-plan apparaît puis après 2 secondes d'affichage de texte. Est-il possible d'afficher du texte immédiatement?

La taille du texte est de 7 à 8 lignes.

Code-

public class Main extends Activity {

       WebView mWebView;

       @Override
       public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);        
          mWebView = (WebView) findViewById(R.id.webview);
          String text = "<html><body>"+"<p align=\"justify\">"+getString(R.string.itext)+"</p>"+"</body></html>"; 
      mWebView .loadData(text, "text/html", "utf-8");
      mWebView .setBackgroundColor(Color.TRANSPARENT);
       }
}

Xml-

  <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
       Android:orientation="vertical" 
       Android:layout_width="fill_parent"
       Android:layout_height="fill_parent" 
       Android:background="@drawable/light">

<WebView
    Android:id="@+id/webview"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:background="@Android:color/transparent"/>
</LinearLayout>
20
John R

Pour définir la taille du texte à partir de la mise en page -

final WebSettings webSettings = web.getSettings();
Resources res = getResources();
fontSize = res.getDimension(R.dimen.txtSize);
webSettings.setDefaultFontSize((int)fontSize);

Pour un affichage immédiat du texte-

webSettings.setRenderPriority(RenderPriority.HIGH);
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
webSettings.setAppCacheEnabled(false);
webSettings.setBlockNetworkImage(true);
webSettings.setLoadsImagesAutomatically(true);
webSettings.setGeolocationEnabled(false);
webSettings.setNeedInitialFocus(false);
webSettings.setSaveFormData(false);

Dans le dossier des valeurs-

<resources>

    <dimen name="txtSize">26sp</dimen>

</resources>

Esperons que ça marche.

50
Kanwaljit Singh
WebSettings webSettings = webView.getSettings();

soit setTextSize ou

webSettings.setTextSize(WebSettings.TextSize.SMALLEST);

Celui-ci fonctionne aussi:

webSettings.setDefaultFontSize(10);

Et afficher le texte immédiatement:

webview.getSettings().setRenderPriority(RenderPriority.HIGH);
webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webview.setBlockNetworkImage(true);
webview.setLoadsImagesAutomatically(true);
webwebviewSettings.setGeolocationEnabled(false);
webview.setNeedInitialFocus(false);
webview.setSaveFormData(false);
18
Digvesh Patel

Je ne sais pas si c'est ce que vous recherchez, mais tant que vous ne voulez pas définir la taille du texte en fonction d'un calcul avec la largeur/hauteur du texte, cela devrait être ce que vous recherchez:

WebSettings settings = yourWebView.getSettings();

De cette façon, vous obtenez les paramètres de WebView dont vous essayez de modifier la taille du texte.

Il existe des valeurs prédéfinies que vous pouvez définir comme taille en utilisant la classe TextSize, par exemple:

settings.setTextSize(TextSize.SMALLEST);
settings.setTextSize(TextSize.SMALLER);
settings.setTextSize(TextSize.NORMAL);
settings.setTextSize(TextSize.BIGGER);
settings.setTextSize(TextSize.BIGGEST);

Vous pouvez simplement choisir celui que vous devez définir en fonction des paramètres de l'appareil actuel que vous choisissez.

Si, au contraire, vous voulez faire une sorte de calcul de largeur/hauteur d'écran et définir le résultat comme une valeur particulière, vous pouvez même utiliser ceci:

settings.setDefaultFontSize(an_integer_that_goes_between_1_and_72);

---- MODIFIER ----

Pour améliorer votre rendu WebView, essayez ce qui suit:

mWebView.getSettings().setRenderPriority(RenderPriority.HIGH);
mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

Vous pouvez également essayer d'ajouter ceci à votre fichier Manifest:

Android:hardwareAccelerated="true"
7
nKn

Il existe trois façons de définir FontSize sur WebView.

1) WebView.setDefaultFontSize (int)

webview.setDefaultFontSize(50);

2) WebView.getSettings (). SetTextSize (WebSettings.TextSize.SMALLEST)

WebView.getSettings().setTextSize(TextSize.SMALLEST); 

ou

WebView.getSettings().setTextSize(TextSize.SMALLER); 

ou

WebView.getSettings().setTextSize(TextSize.NORMAL); 

ou

WebView.getSettings().setTextSize(TextSize.BIGGER); 

ou

WebView.getSettings().setTextSize(TextSize.BIGGEST);

3) Ajoutez la taille de police au format HTML.

String text = "<html><body style=\"color:black;font-family:Helvetica;font-size:12px;\"'background-color:transparent' >"+"<p align=\"justify\">"+getString(R.string.itext)+"</p>"+"</body></html>"; 
6
Niranj Patel

1 - J'utilise ce code qui me donne un bon résultat sur tous mes appareils.

Si le Web est votre WebView,

web = (WebView) v.findViewById(R.id.htmlDisplay);
// Impostazioni della WebView.
final WebSettings webSettings = web.getSettings();
// Set the font size (in sp).
webSettings.setDefaultFontSize(20);

OK, c'est codé en dur

Maintenant, une solution plus dynamique (selon votre question):

Si vous mettez votre taille souhaitée dans un fichier d'entiers (plusieurs, un pour chaque écran que vous supportez), vous pouvez le faire pour récupérer sa valeur:

Resources res = getResources();
float fontSize = res.getInteger(R.integer.font_size);
webSettings.setDefaultFontSize(fontSize);

En supposant que vos fichiers res/values ​​/ integers.xml sont similaires à celui-ci:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="font_size">20</integer>
</resources>

Modifiez donc cette ligne dans le code ci-dessus

webSettings.setDefaultFontSize(20);

à

webSettings.setDefaultFontSize(fontSize);

2 - Pour charger les choses plus rapidement, j'utilise le code suivant

// Optimize loading times.
webSettings.setAppCacheEnabled(false);
webSettings.setBlockNetworkImage(true);
webSettings.setLoadsImagesAutomatically(true);
webSettings.setGeolocationEnabled(false);
webSettings.setNeedInitialFocus(false);
webSettings.setSaveFormData(false);

Notez que je charge plus de 7 à 8 lignes de texte: c'est une page HTML complète avec JavaScript pour développer/réduire les sections. Et cela prend, disons, une demi-seconde pour se charger. Donc, je suppose que 7 à 8 lignes de texte seront chargées en un éclair.

5
Fantômas

Vous pouvez toujours utiliser CSS pour modifier la taille de la police:

String text = "<html><style type=\"text/css\">p{text-align:justify;font-size:80%;}</style></head><body>"+"<p>"+getString(R.string.text1)+"</p>"+"</body></html>";

mWebView.loadData(text, "text/html", "utf-8");

Pour afficher le gras, comme l'a dit Digvesh Patel:

webview.getSettings().setRenderPriority(RenderPriority.HIGH);
webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
3
Luciano Rodríguez

Dans kotlin, ajoutez simplement cette ligne,

webview.settings.defaultFontSize = yourSizeInInteger
1
Walid Al Ashik

Vous pouvez utiliser Html.fromHtml() et écrire votre texte au format HTML.

1
user8938