Как установить размер текста в WebView в Android

Я использую WebView для обоснования текста. Я хочу знать-

  1. Можно ли установить размер текста в layout файл? Как я хочу разный размер текста для разных размеров экрана.

  2. И еще одна проблема - первый фон появляется затем через 2 секунды отображения текста. Можно ли отображать текст сразу?

Размер текста 7-8 строк.

Код-

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>

11 ответов

Решение

Для установки размера текста из макета

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

Для немедленного отображения текста

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);

В папке "Значения"

<resources>

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

</resources>

Надеюсь, что это работает.

WebSettings webSettings = webView.getSettings();

либо setTextSize, либо

webSettings.setTextSize(WebSettings.TextSize.SMALLEST);

Этот тоже работает:

webSettings.setDefaultFontSize(10);

И немедленно отобразить текст:

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);

1 - я использую этот код, который дает мне хороший результат на всех моих устройствах.

Если веб-это ваш 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);

Хорошо, это жестко

Теперь более динамичное решение (согласно вашему вопросу):

Если вы поместите желаемый размер в файл целых чисел (несколько, по одному для каждого экрана, который вы поддерживаете), вы можете сделать это, чтобы получить его значение:

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

Предполагая, что ваши файлы res/values ​​/inteers.xml похожи на этот:

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

Так что измените эту строку в приведенном выше коде

webSettings.setDefaultFontSize(20);

в

webSettings.setDefaultFontSize(fontSize);

2 - Чтобы загружать вещи быстрее, я использую следующий код

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

Обратите внимание, что я загружаю более 7-8 строк текста: это полная HTML-страница с JavaScript для расширения / свертывания разделов. И, скажем, загрузка занимает полсекунды. Итак, я думаю, 7-8 строк текста будут загружены в одно мгновение.

Я не уверен, что это то, что вы ищете, но если вы не хотите устанавливать размер текста на основе вычисления с шириной / высотой текста, это должно быть то, что вы ищете:

WebSettings settings = yourWebView.getSettings();

Таким образом, вы получаете настройки WebView чей размер текста вы пытаетесь изменить.

Есть несколько предопределенных значений, которые вы можете установить в качестве размера, используя TextSize класс, например:

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

Вы можете просто выбрать, какой вам нужно установить, в зависимости от параметров текущего устройства, которое вы выбираете.

Если вы, наоборот, хотите выполнить какое-то вычисление ширины / высоты экрана и установить результат в качестве определенного значения, вы можете даже использовать это:

settings.setDefaultFontSize(an_integer_that_goes_between_1_and_72);

---- РЕДАКТИРОВАТЬ ----

Чтобы улучшить ваш WebView рендеринг, попробуйте следующее:

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

Вы также можете попробовать добавить это к вашему Manifest файл:

android:hardwareAccelerated="true"

Существует три способа установки FontSize на WebView,

1) WebView.setDefaultFontSize (int)

webview.setDefaultFontSize(50);

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

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

или же

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

или же

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

или же

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

или же

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

3) Добавить размер шрифта в формате 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>"; 

Web Settings.setTextSize теперь не используется.

Вы можете использовать setTextZoom ИЛИ getTextZoom для изменения размера шрифта веб-просмотра.

Для Regular textize вы можете указать целочисленное значение 100. И если вы хотите увеличить размер шрифта, вы можете использовать код, как показано ниже:

webView.settings.textZoom = 125

Вы всегда можете использовать CSS для изменения размера шрифта:

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");

Чтобы показать, что, как сказал Дигвеш Патель раньше:

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

В котлине просто добавьте эту строку,

webview.settings.defaultFontSize = yourSizeInInteger

Ты можешь использовать Html.fromHtml() и напиши свой текст на HTML формат.

webView.getSettings().setDefaultFontSize(5); //5 or any dmen you want

Метод получает целочисленное значение, которое может хранить деление в ресурсах и присваивать его переменной, после чего вы можете включить его в процедуру настройки пользователя, чтобы установить размер шрифта, который подходит ему как пользователю.

      webSettings.setDefaultFontSize(23);

или же

      Resources res = getResources();
            int fontSize = res.getInteger(R.integer.font_size);
            webSettings.setDefaultFontSize(fontSize);
Другие вопросы по тегам