Отрегулируйте размер шрифта Android WebView - PullRequest
5 голосов
/ 15 ноября 2010

Как вы регулируете размер шрифта 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 ]

21 голосов
/ 16 ноября 2010

@ ответ и комментарий Роба указали мне правильное направление.

Сначала убедитесь, что все размеры шрифта относительно размера шрифта по умолчанию. Если вы используете абсолютные значения, следующие элементы не будут работать с этими элементами.

Тогда:

@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).

4 голосов
/ 15 ноября 2010

Я не знаю, что webkitTextSizeAdjust поддерживается во всем, кроме сафари / мобильного сафари.

Попробуйте WebSettings.setTextSize (WebSettings.TextSize t)

, а не пытайтесь сделать это с помощью JavaScript.

0 голосов
/ 10 апреля 2012

Брайан Кули помог мне с этим ... попробуй ...

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