【问题标题】:How to set text size in WebView in android如何在android的WebView中设置文本大小
【发布时间】:2014-03-08 19:02:48
【问题描述】:

我正在使用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>

【问题讨论】:

  • 您是否使用设备测试过您的应用程序?
  • 是的,我在设备上测试我的代码。
  • 如果去掉透明度会提高性能吗?

标签: android webview text-size text-justify


【解决方案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>

希望它有效。

【讨论】:

  • WebSettings 类型的方法 setRenderPriority(WebSettings.RenderPriority) 已弃用
  • 我测试你的代码。看来您不应该将字体大小从 dimen 传递给 setDefaultFontSize()。例如,如果您想以 12 sp 大小显示文本,您只需将 12 传递给该方法。
【解决方案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);

【讨论】:

  • 仍然需要同样的时间来加载。我正在使用最小 SDK 版本 8。
  • 如果我将字体大小设置为 10,那么它在所有设备上都一样吗?
  • 和.setRenderPriority被黑线截断。
【解决方案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);

---- 编辑----

要增强您的 WebView 渲染效果,请尝试以下操作:

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

您也可以尝试将其添加到您的 Manifest 文件中:

android:hardwareAccelerated="true"

【讨论】:

  • 您是否在 Android Kit Kat 设备或其他设备上也遇到过这种情况?
  • 您是否在在后面 WebView 加载一些东西?我的意思是,是否有什么东西阻止了 WebView 的加载,例如 ImageView 或某些网络操作?
  • 我在 xml 中设置背景。并在活动中使用上述编码加载文本。
  • 请看我的更新,它应该增强你的 WV 的渲染。
【解决方案4】:

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 行文本会在一个 Flash 中加载。

【讨论】:

  • 耗时近 1 秒。
  • @AartooDetoo 以及在哪里添加这些行?
  • @JohnR:在 WebView 定义和 WebSettings 对象声明之后。看,我更新了我的答案,为思考者提供了更多设置。
  • @AartooDetoo 刚刚在我的代码中添加这些时您编辑的行。出现黑屏,不出现文字。有些线条被黑线切割。可能不支持,因为我的应用中的最低 sdk 版本为 8。
  • .setDefaultFontSize 需要 int 值错误。
【解决方案5】:

WebView 上设置FontSize 有三种方法。

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

【讨论】:

  • 为了立即显示文本,没有任何答案有效。请告诉我如何立即显示文字?
【解决方案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");

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

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

【讨论】:

    【解决方案7】:

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

    【讨论】:

    • 您能解释一下在哪里使用此代码以及我需要做的其他更改吗?
    • 您可以在 textview 上使用 textview.setText(html.fromHtml()) 进行设置
    • 只有这一行就够了?
    • 在哪里写html文本?
    • 不,您必须使用 html 标签 ex textview.setText(html.fromHtml("

      your text

      "));
    【解决方案8】:

    在 kotlin 中只需添加这一行,

    webview.settings.defaultFontSize = yourSizeInInteger
    

    【讨论】:

      【解决方案9】:
      webView.getSettings().setDefaultFontSize(5); //5 or any dmen you want
      

      【讨论】:

        【解决方案10】:

        webSettings.setTextSize 现在已被弃用。

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

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

        webView.settings.textZoom = 125
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-20
          • 2012-01-12
          • 1970-01-01
          • 1970-01-01
          • 2021-12-05
          • 1970-01-01
          相关资源
          最近更新 更多