Как установить размер текста в WebView в android
Я использую WebView
для выравнивания текста. Я хочу знать -
-
Можно ли установить размер текста в файле layout
? Поскольку мне нужен другой размер текста для разных размеров экрана.
-
А также одна проблема - это первый фон, после 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>
Ответы
Ответ 1
Для установки размера текста из макета -
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>
Надеюсь, что это сработает.
Ответ 2
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);
Ответ 3
Я не уверен, что это то, что вы ищете, но пока вы не хотите устанавливать размер текста на основе расчета с шириной/высотой текста, это должно быть то, что вы ищу:
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);
---- EDIT ----
Чтобы улучшить рендеринг WebView
, попробуйте следующее:
mWebView.getSettings().setRenderPriority(RenderPriority.HIGH);
mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
Вы также можете попробовать добавить это в свой Manifest
файл:
android:hardwareAccelerated="true"
Ответ 4
Существует три способа установить 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>";
Ответ 5
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 /integers.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 строк текста будут загружены со вспышкой.
Ответ 6
Вы можете всегда использовать 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");
Чтобы отобразить fater, как сказал Digvesh Patel:
webview.getSettings().setRenderPriority(RenderPriority.HIGH);
webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
Ответ 7
Вы можете использовать Html.fromHtml()
и записать текст в формате HTML
.
Ответ 8
В kotlin просто добавьте эту строку,
webview.settings.defaultFontSize = yourSizeInInteger