29

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>
4

10 回答 10

62

从布局设置文本大小-

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>

希望它有效。

于 2014-02-22T10:48:24.193 回答
20
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);
于 2014-02-17T05:07:00.673 回答
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"
于 2014-02-15T16:32:41.610 回答
7

1 - 我正在使用这段代码,它在我的所有设备上都给了我很好的结果。

如果 web 是你的 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 行文本会在瞬间加载。

于 2014-02-15T18:54:25.387 回答
6

有三种设置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>"; 
于 2014-02-21T05:55:45.133 回答
3

您始终可以使用 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");

为了显示更胖,正如 Digvesh Patel 之前所说:

webview.getSettings().setRenderPriority(RenderPriority.HIGH);
webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
于 2014-02-19T12:24:25.973 回答
1

您可以使用Html.fromHtml()和编写HTML格式的文本。

于 2014-02-11T06:07:50.467 回答
1

在 kotlin 中只需添加这一行,

webview.settings.defaultFontSize = yourSizeInInteger
于 2019-07-16T07:47:27.497 回答
1
webView.getSettings().setDefaultFontSize(5); //5 or any dmen you want
于 2019-12-01T12:33:53.950 回答
0

webSettings.setTextSize 现在被贬低了。

您可以使用setTextZoomgetTextZoom来更改 webview 字体的大小。

对于常规文本大小,您可以将整数值设为 100。如果您想增加字体大小,则可以使用如下代码:

webView.settings.textZoom = 125
于 2020-03-13T10:12:28.647 回答