调整Android WebView的字体大小

时间:2010-11-15 19:43:52

标签: javascript android webkit webview font-size

如何调整Android WebView的字体大小?以下似乎没有效果:

private void fontSizePlus() {
    fontSize = (fontSize < FONT_SIZE_MAX) ? fontSize + FONT_SIZE_INCREMENT : fontSize;
    this.changeFontSize(fontSize);
}

private void fontSizeMinus() {
    fontSize = (fontSize > FONT_SIZE_MIN) ? fontSize - FONT_SIZE_INCREMENT : fontSize;
    this.changeFontSize(fontSize);
}

private void changeFontSize(int value) {
    String js = "document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '" + value + "%';";
    mWebView.loadUrl("javascript:(function() { " + js +  " })()");  
}

WebView和常量的初始化如下:

private final static int FONT_SIZE_DEFAULT = 100;
private final static int FONT_SIZE_MIN = 50;
private final static int FONT_SIZE_MAX = 150;
private final static int FONT_SIZE_INCREMENT = 5;
private int fontSize = FONT_SIZE_DEFAULT;

private WebView mWebView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.index);
    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.loadUrl("file:///android_asset/index.htm");
}

3 个答案:

答案 0 :(得分:21)

@ rob的回答和评论指出了我正确的方向。

首先确保所有字体大小都相对于默认字体大小。如果使用绝对值,则以下内容不适用于这些元素。

然后:

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    mWebView = (WebView) findViewById(R.id.webview);
    fontSize = mWebView.getSettings().getDefaultFontSize();
    ...
}

private void fontSizePlus() {
    fontSize++;
    this.changeFontSize(fontSize);
}

private void fontSizeMinus() {
    fontSize--;
    this.changeFontSize(fontSize);
}

private void changeFontSize(int value) {
    mWebView.getSettings().setDefaultFontSize(value);
}

通过更改默认字体大小的值,可以相应地调整所有相对字体大小。这比WebSettings.setTextSize (WebSettings.TextSize t)提供了更大的控制力。

答案 1 :(得分:4)

我不知道除了safari / mobile safari之外的其他任何内容都支持webkitTextSizeAdjust

尝试WebSettings.setTextSize (WebSettings.TextSize t)

而不是尝试使用javascript。

答案 2 :(得分:0)

Brian Cooley帮我解决了这个问题......试试吧......

increaseFontButton.setOnClickListener( new OnClickListener() {
    public void onClick(View v) {
        WebSettings settings = myWebView.getSettings();
        settings.setTextZoom( (int)(settings.getTextZoom() * 1.1) );
    }
}